0

我有两个字符串,就像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

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

4

3 回答 3

5

您的代码将两个字符串拆分为,(返回 a )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此处。

于 2013-07-09T14:02:23.957 回答
3

Set 在这里会更优雅:

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

并且应该更有效率。

于 2013-07-09T14:05:26.360 回答
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.。分号相当……丑陋。

于 2013-07-09T13:56:23.710 回答