我如何比较python中的两个字符串?

时间:2014-02-20 09:42:05

标签: python string python-2.7

我有两个字符串,如

string1="abc def ghi"

string2="def ghi abc"

如何在不破坏单词的情况下使这两个字符串相同?

14 个答案:

答案 0 :(得分:57)

似乎问题不是字符串相等,而是相等。您可以通过分割字符串并将它们转换为集合来以这种方式进行比较:

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

结果将是

True

答案 1 :(得分:43)

如果你想知道两个字符串是否相等,你可以简单地做

print string1 == string2

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

>>> string1, string2 = "abc def ghi", "def ghi abc"
>>> from collections import Counter
>>> Counter(string1) == Counter(string2)
True

答案 2 :(得分:10)

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

答案 3 :(得分:7)

这样的事情:

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

更新:如果您想查看每个子字符串是否存在于另一个子字符串中:

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

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

答案 4 :(得分:5)

我将提供几种解决方案,您可以选择满足您需求的解决方案:

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

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

2)如果您还关注两个字符串中的空格数(空格字符),那么只需使用以下代码段:

sorted(string1) == sorted(string2)

3)如果您正在考虑单词而不是他们的顺序,并检查两个字符串是否具有相同的单词频率,无论其顺序/出现次数如何,那么可以使用:

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

4)扩展上述内容,如果您不关心频率计数,只需要确保两个字符串包含相同的 set 字样,然后你可以使用以下内容:

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

答案 5 :(得分:5)

直接比较中的平等:

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

答案 6 :(得分:3)

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

from difflib import SequenceMatcher

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

然后调用similar()作为

similar(string1, string2)

它将返回比较,比率> =阈值以获得匹配结果

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

我认为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']

答案 9 :(得分:0)

尝试将两个字符串转换为大写或小写。然后,您可以使用==比较运算符。

答案 10 :(得分:0)

这是一个非常基本的示例,但是在逻辑比较(==)或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())

答案 11 :(得分:0)

如果您只需要检查两个字符串是否完全相同,

text1 = 'apple'

text2 = 'apple'

text1 == text2

结果将是

True

如果您需要匹配的百分比,

import difflib

text1 = 'Since 1958.'

text2 = 'Since 1958'

output = str(int(difflib.SequenceMatcher(None, text1, text2).ratio()*100))

匹配百分比输出将为

'95'

答案 12 :(得分:-1)

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

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

答案 13 :(得分:-3)

您可以使用简单的循环来检查两个字符串是否相等。但是,理想情况下,您可以使用return s1 == s2

之类的方法
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