如何比较python中的两个string?

我有两个string

string1="abc def ghi" 

 string2="def ghi abc" 

如何得到这两个string是相同的没有打破的话?

似乎问题不是关于string平等,而是集合平等。 你可以用这种方法比较它们, 只需将string拆分并将它们转换为集合:

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

结果会是

 True 

如果你想知道两个string是否相等,你可以简单的做

 print string1 == string2 

但是如果你想知道他们是否有相同的字符集,并且他们发生的次数相同,你可以使用collections.Counter ,像这样

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

像这样的东西:

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

更新:如果你想看看是否每个子string可能存在于另一个:

 elem1 = [x for x in string1.split()] elem2 = [x for x in string2.split()] for item in elem1: if item in elem2: print item 

我将提供几种解决scheme,您可以select满足您的需求的解决scheme:

1)如果你只关心两个字符中的字符,即相同的字符和相同的频率,则使用:

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

2)如果你也关心两个string中的空格(空白字符)的数量,那么只需使用下面的代码片段:

 sorted(string1) == sorted(string2) 

3)如果你正在考虑单词,但不考虑单词的顺序,并检查这两个单词是否有相同的单词频率,而不pipe它们的顺序/发生情况如何,则可以使用:

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

4)扩展上面,如果你不关心频率计数,但只需要确保两个string包含相同的一单词,那么你可以使用以下内容:

 set(string1.split()) == set(string2.split()) 

打开这两个文件然后通过拆分它的单词内容来比较它们;

 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 

我认为difflib是一个很好的图书馆来做这个工作

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

平等直接比较:

 string1 = "sample" string2 = "sample" if string1 == string2 : print("Strings are equal with text : ", string1," & " ,string2) else : print ("Strings are not equal") 

字符集中的平等:

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

尝试将两个string转换为大写或小写。 那么你可以使用==比较运算符。

为此,您可以在python中使用默认的difflib

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

然后调用类似()

 similar(string1, string2) 

它会返回比较结果,比值> =阈值

如果你想要一个非常简单的答案:

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