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

时间:2014-02-17 06:01:05

标签: python list reverse

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()

基本上,输入的数字正在增加,然后鱼正在上升,如果数字正在减少,则鱼正在减少。最后,如果输入的数字不是连续增加或减少,即1,3,2,那么它应该不输出鱼。即使有另一种更有效的方法可以做到这一点,有人可以解释如何比较两个相同的列表,看看它们是否在同一个顺序?

4 个答案:

答案 0 :(得分:4)

使用.sort.reverse函数时,他们就地排序/反转数据并返回None。因此,您要为Nonenewarray分配newarray2。然后在条件中,您要检查None == None是否始终为True。这就是您的代码无法正常工作的原因。

我能想到的直截了当和通用的方式就是这个

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

答案 1 :(得分:1)

为什么您的代码段不起作用

**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没有任何东西

示例:

>>> nar = [3,2,1]
>>> array = nar.sort()
>>> array
>>> nar
[1, 2, 3]
>>>

所以,请使用sorted()内置函数。

答案 2 :(得分:0)

使用numpy数组更容易做到这一点......

import numpy as np
def abc(*args):
    xx = np.array(args)
    if    all(xx[1:] > xx[:-1]): print 'Increasing order'
    elif  all(xx[1:] < xx[:-1]): print 'Decreasing order'
    else:                        print 'Rando order'

答案 3 :(得分:-1)

如果您不想对列表进行排序,可以使用以下代码段:

for i,j in zip(*(a,b)):
    if i == j:
        continue
    else:
        print 'lists are not equal'
        break

这基本上实现了乔希提出的建议。

快速演示:

In [7]: for i,j in zip(*(a,b)):
   ...:     print i,j
   ...:     if i==j:
   ...:         continue
   ...:     else:
   ...:         print 'lists not equal'
   ...:         break
   ...:     
a a
b b
c c

In [8]: a='abd'

In [9]: for i,j in zip(*(a,b)):
    print i,j
    if i==j:
        continue
    else:
        print 'lists not equal'
        break
   ...:     
a a
b b
d c
lists not equal