我有两个字符串,例如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
这段代码对吗?我有什么需要改进的吗?
答案 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,fly
和dream,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.
。半冒号相当......丑陋。