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

7

我有两个列表,需要按照它们的最大元素进行比较,如果相等,则按照第二大的元素进行比较,如果仍然相等,则按照第三大的元素依次迭代比较整个数组。

例如:

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

我在想是否有更加简洁高效的写法,因为它看起来并不是很符合 Python 的风格。

编辑:通过使用“<”和“>”比较列表将使列表从最小索引到最大索引排序,而不是从最大索引到最小索引。使用 reversed 可以让">"和"<"成为最简单的解决方案。


2
你的文本说你想首先通过它们的最大元素进行比较,但是你的代码并没有这样做,而是首先通过最小元素进行比较。恰好你选择了一个例子,两种不同的排序顺序得到了相同的结果。 - Steve Jessop
好的,我觉得我可以通过在范围内反转索引来修复错误。 - Noob Coder
2个回答

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]]

这个函数将按照每个列表的单独排序值进行比较,您可以将任意数量的列表作为参数输入到函数中。


@wim,原帖似乎想要将列表按相反的顺序排列,将具有最大值的列表放在前面。虽然问题中没有明确提到外部顺序,但我认为示例已经很清楚了。 - Justin O Barber

1

sorted of sorted is good, but I'm partial to:

排序排序很好,但我更偏爱:
#!/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)

它应该更快,占用更少的内存。对于新手来说也更加清晰易懂。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接