如何比较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")