J'ai deux cordes comme
string1="abc def ghi"
et
string2="def ghi abc"
Comment faire pour que ces deux chaînes soient identiques sans casser les mots?
Il semble que la question ne concerne pas l'égalité des chaînes, mais celle de ensembles. Vous pouvez les comparer de cette façon uniquement en scindant des chaînes et en les convertissant en ensembles:
s1 = 'abc def ghi'
s2 = 'def ghi abc'
set1 = set(s1.split(' '))
set2 = set(s2.split(' '))
print set1 == set2
Le résultat sera
True
Si vous voulez savoir si les deux chaînes sont égales, vous pouvez simplement faire
_print string1 == string2
_
Mais si vous voulez savoir s'ils ont tous les deux le même jeu de caractères et qu'ils se produisent le même nombre de fois, vous pouvez utiliser collections.Counter
, comme ceci
_>>> string1, string2 = "abc def ghi", "def ghi abc"
>>> from collections import Counter
>>> Counter(string1) == Counter(string2)
True
_
>>> s1="abc def ghi"
>>> s2="def ghi abc"
>>> s1 == s2 # For string comparison
False
>>> sorted(list(s1)) == sorted(list(s2)) # For comparing if they have same characters.
True
>>> sorted(list(s1))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> sorted(list(s2))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
Quelque chose comme ça:
if string1 == string2:
print 'they are the same'
pdate: si vous voulez voir si chaque sous-chaîne peut exister dans l'autre:
elem1 = [x for x in string1.split()]
elem2 = [x for x in string2.split()]
for item in elem1:
if item in elem2:
print item
Je vais vous proposer plusieurs solutions et vous pouvez choisir celle qui répond à vos besoins:
1) Si vous ne vous préoccupez que des caractères, c’est-à-dire des caractères identiques et ayant des fréquences égales de chacune des deux chaînes, utilisez:
''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()
2) Si vous êtes également préoccupé par le nombre d'espaces (caractères d'espacement) dans les deux chaînes, utilisez simplement l'extrait suivant:
sorted(string1) == sorted(string2)
3) Si vous envisagez des mots mais pas leur ordre et vérifiez si les deux chaînes ont des fréquences égales de mots, quel que soit leur ordre/occurrence, vous pouvez alors utiliser:
sorted(string1.split()) == sorted(string2.split())
4) Étendre ce qui précède, si vous n'êtes pas concerné par le compte de fréquence, mais que vous devez simplement vous assurer que les deux chaînes contiennent le même set de mots, vous pouvez utiliser les éléments suivants:
set(string1.split()) == set(string2.split())
Égalité en comparaison directe:
string1 = "sample"
string2 = "sample"
if string1 == string2 :
print("Strings are equal with text : ", string1," & " ,string2)
else :
print ("Strings are not equal")
Égalité dans les jeux de caractères:
string1 = 'abc def ghi'
string2 = 'def ghi abc'
set1 = set(string1.split(' '))
set2 = set(string2.split(' '))
print set1 == set2
if string1 == string2 :
print("Strings are equal with text : ", string1," & " ,string2)
else :
print ("Strings are not equal")
Pour cela, vous pouvez utiliser difflib par défaut en python
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
puis appelez similar () as
similar(string1, string2)
il retournera compare as, ratio> = seuil pour obtenir le résultat de la correspondance
Je pense que difflib est une bonne bibliothèque pour faire ce travail
>>>import difflib
>>> diff = difflib.Differ()
>>> a='he is going home'
>>> b='he is goes home'
>>> list(diff.compare(a,b))
[' h', ' e', ' ', ' i', ' s', ' ', ' g', ' o', '+ e', '+ s', '- i', '- n', '- g', ' ', ' h', ' o', ' m', ' e']
>>> list(diff.compare(a.split(),b.split()))
[' he', ' is', '- going', '+ goes', ' home']
ouvrez les deux fichiers puis comparez-les en séparant son contenu Word;
log_file_A='file_A.txt'
log_file_B='file_B.txt'
read_A=open(log_file_A,'r')
read_A=read_A.read()
print read_A
read_B=open(log_file_B,'r')
read_B=read_B.read()
print read_B
File_A_set = set(read_A.split(' '))
File_A_set = set(read_B.split(' '))
print File_A_set == File_B_set
Ceci est un exemple assez basique, mais après les comparaisons logiques (==) ou string1.lower() == string2.lower()
, peut-être utile d'essayer certaines des métriques de base des distances entre deux chaînes.
Vous pouvez trouver partout des exemples liés à ces métriques ou à d'autres, essayez également le package fuzzywuzzy ( https://github.com/seatgeek/fuzzywuzzy ).
import Levenshtein
import difflib
print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())
Essayez de convertir les deux chaînes en majuscules ou en minuscules. Ensuite, vous pouvez utiliser l'opérateur de comparaison ==
.
Si vous voulez une réponse très simple:
s_1 = "abc def ghi"
s_2 = "def ghi abc"
flag = 0
for i in s_1:
if i not in s_2:
flag = 1
if flag == 0:
print("a == b")
else:
print("a != b")