Ich habe zwei Saiten wie
string1="abc def ghi"
und
string2="def ghi abc"
Wie kann man erreichen, dass diese beiden Zeichenfolgen gleich sind, ohne die Wörter zu brechen?
python
string
python-2.7
string-comparison
user3064366
quelle
quelle
Antworten:
Anscheinend geht es bei der Frage nicht um die Gleichheit der Zeichenfolgen, sondern um die Gleichheit der Mengen . Sie können sie auf diese Weise vergleichen , nur durch die Spaltung von Streichern und sie setzt Umwandlung:
s1 = 'abc def ghi' s2 = 'def ghi abc' set1 = set(s1.split(' ')) set2 = set(s2.split(' ')) print set1 == set2
Ergebnis wird sein
True
quelle
s1 = 'abc def ghi' s2 = 'def ghi Abc' set1 = set(map(lambda word: word.lower(),s1.split(' '))) set2 = set(map(lambda word: word.lower(),s2.split(' '))) print(set1 == set2)
Demomap
, da Sie die Zeichenfolge vor dem Teilen normalisieren könnenWenn Sie wissen möchten, ob beide Zeichenfolgen gleich sind, können Sie dies einfach tun
print string1 == string2
Aber wenn Sie wissen wollen , ob sie beide den gleichen Satz von Zeichen haben und sie treten gleich oft, können Sie verwenden
collections.Counter
, wie dies>>> string1, string2 = "abc def ghi", "def ghi abc" >>> from collections import Counter >>> Counter(string1) == Counter(string2) True
quelle
>>> 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']
quelle
Etwas wie das:
if string1 == string2: print 'they are the same'
Update: Wenn Sie sehen möchten, ob jede Unterzeichenfolge in der anderen vorhanden sein kann:
elem1 = [x for x in string1.split()] elem2 = [x for x in string2.split()] for item in elem1: if item in elem2: print item
quelle
Gleichheit im direkten Vergleich:
string1 = "sample" string2 = "sample" if string1 == string2 : print("Strings are equal with text : ", string1," & " ,string2) else : print ("Strings are not equal")
Gleichheit in Zeichensätzen:
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")
quelle
Dafür können Sie Standard-Difflib in Python verwenden
from difflib import SequenceMatcher def similar(a, b): return SequenceMatcher(None, a, b).ratio()
Rufen Sie dann ähnlich () auf wie
Es wird "Vergleichen>" zurückgegeben, Verhältnis> = Schwellenwert, um das Übereinstimmungsergebnis zu erhalten
quelle
Ich werde verschiedene Lösungen anbieten, und Sie können die auswählen, die Ihren Anforderungen entspricht:
1) Wenn Sie sich nur mit den Zeichen befassen, dh mit denselben Zeichen und mit jeweils gleichen Häufigkeiten in beiden Zeichenfolgen, verwenden Sie:
''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()
2) Wenn Sie sich auch mit der Anzahl der Leerzeichen (Leerzeichen) in beiden Zeichenfolgen befassen, verwenden Sie einfach das folgende Snippet:
3) Wenn Sie Wörter berücksichtigen, aber nicht deren Reihenfolge und prüfen, ob beide Zeichenfolgen unabhängig von ihrer Reihenfolge / ihrem Auftreten die gleiche Häufigkeit von Wörtern haben, können Sie Folgendes verwenden:
4) Erweitern Sie das Obige. Wenn Sie sich nicht mit der Häufigkeit befassen, sondern nur sicherstellen müssen, dass beide Zeichenfolgen denselben Satz von Wörtern enthalten, können Sie Folgendes verwenden:
quelle
collection.Counter
scheint offensichtlicher als die Verwendungsorted
Wenn Sie nur überprüfen müssen, ob die beiden Zeichenfolgen genau gleich sind,
text1 = 'apple' text2 = 'apple' text1 == text2
Das Ergebnis wird sein
True
Wenn Sie den passenden Prozentsatz benötigen,
import difflib text1 = 'Since 1958.' text2 = 'Since 1958' output = str(int(difflib.SequenceMatcher(None, text1, text2).ratio()*100))
Passende prozentuale Ausgabe wird sein,
'95'
quelle
Ich denke, Difflib ist eine gute Bibliothek, um diesen Job zu erledigen
>>>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']
quelle
Öffnen Sie beide Dateien und vergleichen Sie sie, indem Sie den Wortinhalt aufteilen.
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
quelle
Wenn Sie eine wirklich einfache Antwort wünschen:
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")
quelle
Versuchen Sie, beide Zeichenfolgen in Groß- oder Kleinbuchstaben umzuwandeln. Dann können Sie den
==
Vergleichsoperator verwenden.quelle
Dies ist ein ziemlich einfaches Beispiel, aber nach den logischen Vergleichen (==) oder
string1.lower() == string2.lower()
kann es nützlich sein, einige der grundlegenden Metriken für Abstände zwischen zwei Zeichenfolgen auszuprobieren.Sie können überall Beispiele finden, die sich auf diese oder einige andere Metriken beziehen. Probieren Sie auch das Fuzzywuzzy-Paket ( https://github.com/seatgeek/fuzzywuzzy ).
import Levenshtein import difflib print(Levenshtein.ratio('String1', 'String2')) print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())
quelle
Sie können einfache Schleifen verwenden, um zu überprüfen, ob zwei Zeichenfolgen gleich sind. Aber im Idealfall können Sie so etwas wie return s1 == s2 verwenden
s1 = 'hello' s2 = 'hello' a = [] for ele in s1: a.append(ele) for i in range(len(s2)): if a[i]==s2[i]: a.pop() if len(a)>0: return False else: return True
quelle