Python 比较具有相同元素的列表的顺序是否相同?
基本上,输入的数字在增加,然后鱼在上升,如果数字在减少,鱼在减少。最后,如果输入的数字没有连续增加或减少,即1、3、2,则应不输出fish。即使有另一种更有效的方法可以做到这一点,谁能解释一下如何比较两个相同的列表,看看它们是否在相同的顺序 使用.sort和.reverse函数时,它们会就地对数据进行排序/反转,但不返回任何值。因此,您正在为newarray和newarray2分配None。然后在条件中,您将检查None==None是否始终为真。这就是代码无法正常工作的原因 我能想到的最直接、最普遍的方式是Python 比较具有相同元素的列表的顺序是否相同?,python,list,reverse,Python,List,Reverse,基本上,输入的数字在增加,然后鱼在上升,如果数字在减少,鱼在减少。最后,如果输入的数字没有连续增加或减少,即1、3、2,则应不输出fish。即使有另一种更有效的方法可以做到这一点,谁能解释一下如何比较两个相同的列表,看看它们是否在相同的顺序 使用.sort和.reverse函数时,它们会就地对数据进行排序/反转,但不返回任何值。因此,您正在为newarray和newarray2分配None。然后在条件中,您将检查None==None是否始终为真。这就是代码无法正常工作的原因 我能想到的最直接、最
def sorting(a, b, c):
array = [a, b, c]
newarray = array.sort()
newarray2 = array.reverse()
if newarray == array:
print ('The fish is rising')
elif newarray2 == array:
print ('The fish is decesnding')
else:
print ('No fish')
def main():
sorting((int(input('1st'))), (int(input('2nd'))), (int(input('3rd'))))
main()
使用.sort和.reverse函数时,它们会就地对数据进行排序/反转,但不返回任何结果。因此,您正在为newarray和newarray2分配None。然后在条件中,您将检查None==None是否始终为真。这就是代码无法正常工作的原因
我能想到的最直接、最普遍的方式是
def sorting(a, b, c):
array = [a, b, c]
newarray = array.sort()
newarray2 = array.reverse()
if newarray == array:
print ('The fish is rising')
elif newarray2 == array:
print ('The fish is decesnding')
else:
print ('No fish')
def main():
sorting((int(input('1st'))), (int(input('2nd'))), (int(input('3rd'))))
main()
如果不想对列表进行排序,可以使用以下代码段:
def sorting(*args):
sorted_list, args = sorted(args), list(args)
if sorted_list == args:
print "Rising"
elif sorted_list[::-1] == args:
print "Descending"
else:
print "No Fish"
sorting(1, 2, 3, 4) # Rising
sorting(5, 4, 3, 2, 1) # Descending
sorting(2, 1, 3, 6, 4, 5) # No Fish
这基本上实现了Josh的建议
快速演示:
for i,j in zip(*(a,b)):
if i == j:
continue
else:
print 'lists are not equal'
break
如果不想对列表进行排序,可以使用以下代码段:
def sorting(*args):
sorted_list, args = sorted(args), list(args)
if sorted_list == args:
print "Rising"
elif sorted_list[::-1] == args:
print "Descending"
else:
print "No Fish"
sorting(1, 2, 3, 4) # Rising
sorting(5, 4, 3, 2, 1) # Descending
sorting(2, 1, 3, 6, 4, 5) # No Fish
这基本上实现了Josh的建议
快速演示:
for i,j in zip(*(a,b)):
if i == j:
continue
else:
print 'lists are not equal'
break
代码段无法工作的原因:
排序后,它不返回任何内容,即,您的newarray或newarray2没有任何内容
例如:
**list.sort:**
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
>>>
因此,请使用已排序的内置函数。您的代码段无法工作的原因:
排序后,它不返回任何内容,即,您的newarray或newarray2没有任何内容
例如:
**list.sort:**
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
>>>
所以,请使用排序的内置函数。使用numpy数组更容易做到这一点
>>> nar = [3,2,1]
>>> array = nar.sort()
>>> array
>>> nar
[1, 2, 3]
>>>
使用numpy数组更容易做到这一点
>>> nar = [3,2,1]
>>> array = nar.sort()
>>> array
>>> nar
[1, 2, 3]
>>>
给定两个列表…要查看它们的顺序是否相同,只需同时遍历两个列表,并检查所有索引的相同索引处的元素是否不同。如果有差异,即使是一个,那么列表的顺序也不同给定两个列表…要查看它们的顺序是否相同,只需同时遍历两个列表,并检查所有索引的相同索引中的元素是否不同。如果有任何差异,即使是一个,那么列表的顺序也不同。我理解您的代码,它显然是有效的,但除了使用排序而不是排序(我被引导为使用排序)来实现相同的目标之外,为什么我的列表不起作用?@user1814771 list.sort and list.reverse在适当的位置更改列表并返回None,所以你是在比较None==None。@AshwiniChaudhary感谢你向OP解释:我的答案中也包含了相同的解释。是的,你们都帮了大忙!我把它们改成了排序和::-1,我开始意识到这与拼接有关,所以我明天要学习。谢谢你的帮助@用户1814771是的,它被调用。请考虑它是否有助于我理解你的代码,它显然是有效的,但是除了使用排序,而不是排序,我所理解的实现相同的目标,为什么我的工作失败?@ USE181471List.Road和List.Read改变列表就位,不返回任何一个,所以你是在比较None==None。@AshwiniChaudhary感谢你向OP解释:我的答案中也包含了相同的解释。是的,你们都帮了大忙!我把它们改成了排序和::-1,我开始意识到这与拼接有关,所以我明天要学习。谢谢你的帮助@用户1814771是的,它被调用。请考虑它是否有助于你不工作-尝试ABC1,2, 2, 1,3, 0。此外,为这引入numpy依赖项也太过分了。在[23]:def abc*args:…:xx=arrayargs…:print xx[1:]>xx[:-1]…:In[24]:abc1,2,3,4,5[True]中,它在我的计算机上运行良好。我认为这个想法是将其用作:abc1,2,3,4,5,正如在发布的问题中所示:def sortinga,b,c:1,2小于2,1,也就是小于3,0,但是您的代码在这种情况下会产生ValueError。您不应该在原始问题中比较元组。最初的问题是,在函数定义排序a、b、d中给定3个数字,我们如何检查输入是a>b>c还是aDoesn不工作-尝试abc1、2、2、1、3、0。此外,为这引入numpy依赖项也太过分了。在[23]:def abc*args:…:xx=arrayargs…:print xx[1:]>xx[:-1]…:In[24]:abc1,2,3,4,5[True]中,它在我的计算机上运行良好。我想这个想法是用它来表示:abc1,2,3,4,5,就像在发布的问题中:def sortinga,b,c:1,2小于2,1,小于3,0,但是
在这种情况下,您的代码会生成ValueError。您不应该在原始问题中比较元组。最初的问题是,在函数def sortinga、b、d中给定3个数字,我们如何检查输入是a>b>c还是a为什么要执行所有这些操作而不是a!=b?为什么要经历所有这些而不是a!=B