it-swarm.com.de

Wie vergleiche ich zwei Strings in Python?

Ich habe zwei Saiten wie

string1="abc def ghi"

und

string2="def ghi abc"

Wie kann man erreichen, dass diese beiden Zeichenfolgen identisch sind, ohne die Wörter zu brechen?

73
user3064366

Anscheinend geht es bei der Frage nicht um Zeichenfolgengleichheit, sondern um Mengen Gleichheit. Sie können sie nur auf diese Weise vergleichen , indem Sie Zeichenfolgen aufteilen und in Mengen konvertieren:

s1 = 'abc def ghi'
s2 = 'def ghi abc'
set1 = set(s1.split(' '))
set2 = set(s2.split(' '))
print set1 == set2

Ergebnis wird sein

True
60
oxfn

Wenn Sie wissen möchten, ob beide Zeichenfolgen gleich sind, können Sie dies einfach tun

_print string1 == string2
_

Wenn Sie jedoch wissen möchten, ob beide den gleichen Zeichensatz haben und gleich oft vorkommen, können Sie collections.Counter wie folgt verwenden

_>>> string1, string2 = "abc def ghi", "def ghi abc"
>>> from collections import Counter
>>> Counter(string1) == Counter(string2)
True
_
46
thefourtheye
>>> 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']
12
Tanveer Alam

Etwas wie das:

if string1 == string2:
    print 'they are the same'

pdate: wenn Sie sehen möchten, ob jeder Teilstring im anderen existiert:

elem1 = [x for x in string1.split()]
elem2 = [x for x in string2.split()]

for item in elem1:
    if item in elem2:
        print item
7
philshem

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, d. H. Mit den gleichen Zeichen und mit den gleichen Frequenzen in beiden Zeichenfolgen, dann verwenden Sie:

''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()

2) Wenn Sie auch mit der Anzahl der Leerzeichen (Leerzeichen) in beiden Zeichenfolgen befasst sind, verwenden Sie einfach das folgende Snippet:

sorted(string1) == sorted(string2)

3) Wenn Sie Wörter, aber nicht deren Reihenfolge betrachten und prüfen, ob beide Zeichenfolgen die gleiche Häufigkeit von Wörtern haben, unabhängig von ihrer Reihenfolge/ihrem Vorkommen, können Sie Folgendes verwenden:

sorted(string1.split()) == sorted(string2.split())

4) Erweitern Sie das Obige, wenn Sie nicht mit der Frequenzzählung befasst sind, sondern nur sicherstellen müssen, dass beide Zeichenfolgen die gleiche Menge enthalten von Wörtern, dann können Sie Folgendes verwenden:

set(string1.split()) == set(string2.split())
5
Archit Kapoor

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")
5
A.G

Dafür können Sie in Python Standard-Difflib verwenden

from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

dann rufe similar () auf als

similar(string1, string2)

es wird "compare as, ratio> = threshold" zurückgegeben, um das Übereinstimmungsergebnis zu erhalten

4
Basil Jose

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']
2
Asad

öffnen Sie beide Dateien und vergleichen Sie sie, indem Sie den Word-Inhalt 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
1
Anum Sheraz

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 Paket fuzzywuzzy aus ( https://github.com/seatgeek/fuzzywuzzy ).

import Levenshtein
import difflib

print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())
0
Joe9008

Versuchen Sie, beide Zeichenfolgen in Groß- oder Kleinschreibung umzuwandeln. Dann können Sie den Vergleichsoperator == verwenden.

0

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")
0