比较两个列表以查找更大的列表

时间:2013-12-31 02:49:12

标签: python arrays list

我有两个列表,需要通过它们的最大元素进行比较,如果它是并列的,它们的第二大元素,如果它是并列的,则第三大等等迭代到整个数组。

例如:

list1= [0,2,3,6,12]
list2= [1,2,3,6,12]
list3= [1,4,5,8,12]
list4= [1,4,5,9,12]

所以list4> list3> list2> list1的。

我写了一个功能来完成这个:

def compare(x,y):
    if sorted(x)==sorted(y):
        return "Tie"
    for index in range(len(x)-1,-1,-1):
        if sorted(x)[index]>sorted(y)[index]:
            return x
        elif sorted(x)[index]<sorted(y)[index]:
            return y

我想知道是否有更简洁,更有效的函数编写方式,因为它看起来不是Pythonic。

编辑:使用“&lt;”比较列表和“&gt;”将列表从最小索引到最大索引排序,而不是从最大索引到最小索引。反转将使“&gt;”和“&lt;”最简单的解决方案。

2 个答案:

答案 0 :(得分:8)

这个怎么样?

>>> list1= [0,2,3,6,12]
>>> list2= [1,2,3,6,12]
>>> list3= [1,4,5,8,12]
>>> list4= [1,4,5,9,12]
>>> def sort_lists_by_maxes(*lists):
    return sorted(lists, key=lambda x: sorted(x, reverse=True), reverse=True)

>>> sort_lists_by_maxes(list1, list2, list3, list4)
[[1, 4, 5, 9, 12], [1, 4, 5, 8, 12], [1, 2, 3, 6, 12], [0, 2, 3, 6, 12]]

列表按其各自排序的值进行比较,您可以将所需的列表作为参数提供给函数。

答案 1 :(得分:1)

排序好的,但我偏爱:

#!/usr/local/cpython-3.3/bin/python

list1 = [0, 2, 3, 6, 12]
list2 = [1, 2, 3, 6, 12]
list3 = [1, 4, 5, 8, 12]
list4 = [1, 4, 5, 9, 12]

metalist = [ list1, list2, list3, list4 ]

for sublist in metalist:
    sublist.sort(reverse=True)

metalist.sort(reverse=True)

print(metalist)

它应该更快,占用更少的内存。新手也更清楚。