python返回等于字符串实际上不相等的位置?

时间:2013-07-09 13:55:09

标签: python

我有两个字符串,例如s1='fly,dream';s2='dream,fly' 我希望s1等于s2

我尝试的代码是:

def Isequal(m,n):
    s1=m.split(',')    s2=n.split(',')   s1.sort()   s2.sort()
    if s1 == s2:
        print 'Equal'
    else:
        print s1,s2

注意:s1可能等于s2。 然后

def Isequal(m,n):
s1=m.split(',')
s2=n.split(',')
if s1 == s2.reverse() || s1 == s2:
print 'Equal'
else:
print s1,s2

这段代码对吗?我有什么需要改进的吗?

3 个答案:

答案 0 :(得分:5)

您的代码将,(返回list)拆分为两个字符串,然后调用sort上的list方法。由于两个子字符串相同,因此对子字符串列表进行排序会产生相同的列表。知道发生了什么的最好方法是打印出来的东西。查看结果。

>>> s1 = 'fly,dream'
>>> s2 = 'dream,fly'
>>> s1 = s1.split(',')
>>> s1
['fly', 'dream']
>>> s2 = s2.split(',')
>>> s2
['dream', 'fly']
>>> s1.sort()
>>> s1
['dream', 'fly']
>>> s2.sort()
>>> s2
['dream', 'fly']
>>> s1 == s2
True

如果要检查两个字符串是否包含相同的子字符串,请使用sets,如下所示:

>>> varOne = set(s1.split(','))
>>> varTwo = set(s2.split(','))
>>> varOne == varTwo
True

谨防这些设置只允许使用唯一商品,因此fly,dream,flydream,dream,fly会在此处生成True

答案 1 :(得分:3)

这里的设置会更优雅:

def Isequal(m, n):
    s1 = set(m.split(','))
    s2 = set(n.split(','))
    if s1 == s2:
        print 'Equal'
    else:
        print s1, s2

也应该更有效率。

答案 2 :(得分:1)

您可能不想使用sort()来翻转列表。发生的排序完全取决于字符串(它在每个字符串的第一个字母上有所不同)。您可以使用.reverse来撤消列表:

def Isequal(m,n):
    m = m.split(',')
    m.reverse()
    if m == n.split(','):
        print "Equal"
    else:
        print m, n

如果您想对列表进行排序,您始终可以.reverse()代替.sort()


如果反转列表只是你问题中的一个例子,当你拆分它们时你的字符串实际上会有更多的项目,你可以使用集合:

def Isequal(m,n):
    if not set(m.split(',')).symmetric_difference(n.split(',')):
        print "Equal"
    else:
        print m, n

顺便说一句,Sparse is better than dense.。半冒号相当......丑陋。