我有两个像
string1="abc def ghi"
和
string2="def ghi abc"
如何在不打断单词的情况下使这两个字符串相同?
我有两个像
string1="abc def ghi"
和
string2="def ghi abc"
如何在不打断单词的情况下使这两个字符串相同?
Answers:
似乎问题不是关于字符串相等,而是集合相等。您只能通过拆分字符串并将其转换为集合来以这种方式进行比较:
s1 = 'abc def ghi'
s2 = 'def ghi abc'
set1 = set(s1.split(' '))
set2 = set(s2.split(' '))
print set1 == set2
结果将是
True
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)
演示
map
,因为您可以在拆分之前对字符串大小写进行规范化
如果您想知道两个字符串是否相等,则只需
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']
直接比较中的平等:
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")
我将提供几种解决方案,您可以选择一种满足您需求的解决方案:
1)如果仅关注字符,即,两个字符串中相同的字符且每个字符的频率相同,请使用:
''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()
2)如果您还担心两个字符串中的空格数(空格字符),则只需使用以下代码段:
sorted(string1) == sorted(string2)
3)如果您在考虑单词而不是单词的顺序,并检查两个字符串是否具有相等的单词频率,而不管它们的顺序/出现情况如何,则可以使用:
sorted(string1.split()) == sorted(string2.split())
4)扩展以上内容,如果您不关心频率计数,而只需要确保两个字符串包含相同的单词集,则可以使用以下内容:
set(string1.split()) == set(string2.split())
collection.Counter
似乎比使用它更明显sorted
我认为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']
打开两个文件,然后通过分割其单词内容进行比较;
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
如果您想要一个非常简单的答案:
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")
尝试将两个字符串都大写或小写。然后,您可以使用==
比较运算符。
这是一个非常基本的示例,但是在进行逻辑比较(==)或之后string1.lower() == string2.lower()
,尝试两个字符串之间的距离的一些基本指标可能会很有用。
您到处都可以找到与这些指标或其他指标相关的示例,还可以尝试使用Fuzzywuzzy软件包(https://github.com/seatgeek/fuzzywuzzy)。
import Levenshtein
import difflib
print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())