【问题标题】:Comparing Two Lists to Find Bigger List比较两个列表以找到更大的列表
【发布时间】:2013-12-31 02:49:11
【问题描述】:

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

例如:

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。

编辑:使用“”比较列表会将列表从最小索引排序到最大索引,而不是从最大索引到最小索引。反转将使“>”和“

【问题讨论】:

  • 你的文字说你想先比较它们的最大元素,但是你的代码没有这样做,它首先比较最小的元素。碰巧您选择了一个示例,其中这两个不同的排序顺序具有相同的结果。
  • 很好——我想我可以通过反转范围内的索引来修复错误

标签: python arrays list


【解决方案1】:

这个怎么样?

>>> 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 OP 似乎希望列表以相反的顺序排列,首先具有最大值的列表。虽然问题中没有明确提到外部顺序,但我认为这个例子说明了这一点。
【解决方案2】:

sorted of sorted 很好,但我偏爱:

#!/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)

它应该更快并且占用更少的内存。新手也比较清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多