Python 比较具有相同元素的列表的顺序是否相同?

Python 比较具有相同元素的列表的顺序是否相同?,python,list,reverse,Python,List,Reverse,基本上,输入的数字在增加,然后鱼在上升,如果数字在减少,鱼在减少。最后,如果输入的数字没有连续增加或减少,即1、3、2,则应不输出fish。即使有另一种更有效的方法可以做到这一点,谁能解释一下如何比较两个相同的列表,看看它们是否在相同的顺序 使用.sort和.reverse函数时,它们会就地对数据进行排序/反转,但不返回任何值。因此,您正在为newarray和newarray2分配None。然后在条件中,您将检查None==None是否始终为真。这就是代码无法正常工作的原因 我能想到的最直接、最

基本上,输入的数字在增加,然后鱼在上升,如果数字在减少,鱼在减少。最后,如果输入的数字没有连续增加或减少,即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