逐个元素地比较任意数量的列表

时间:2013-06-15 15:11:53

标签: python list compare sublist

我有一堆表格清单:

list1 = [4,[14,13,12,11,10]]
list2 = [4,[13,12,11,10,9 ]]
list3 = [4,[5 ,4 ,3 ,2 ,1 ]]
list4 = [3,[14,14,14,13,1 ]]
list5 = [3,[14,14,14,12,11]]
list6 = [2,[14,14,13,13,12]]
list7 = [1,[14,14,13,12,11]]
list8 = [0,[14,13,12,11, 9]]

我需要使用以下比较来比较这些列表: 1)比较第一个子列表。并返回包含最大子列表值的所有列表。所以在上面的例子中,我将返回list1,list2,list3,因为它们都有第一个子列表值4。 2)然后我会比较第二个子列表(列表中的列表) 这种比较在每个列表中都是逐个元素。 示例:查看列表1,2,3。列表1的第一个元素是14,列表2的第一个元素是13,列表3的第一个元素是5.因此,它将导致返回列表1,因为它具有比列表2和列表3更高的值。

但请考虑一下:

list1 = [4,[14,13,12,11,10]]
list2 = [4,[14,13,11,10,8 ]]

list1和list2都有4作为第一个子列表,所以我会抓住它们。接下来我将查看第二个子列表(同样是列表),并逐个元素地比较,直到一个列表大于另一个列表。所以我在这里比较14 == 14,13 == 13,最后12> 11,所以将返回list1。

我仍然需要使用任意数量的列表和元素横向来执行此操作。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

如果您正在尝试根据列表内容对列表进行排序,那么您描述的比较行为是Python默认使用的行为,因此您可以使用Python的内置列表排序来实现此目的。

>>> import random, pprint
>>> all_lists = [[4, [14, 13, 12, 11, 10]],
...              [4, [13, 12, 11, 10, 9]],
...              [4, [5, 4, 3, 2, 1]],
...              [3, [14, 14, 14, 13, 1]],
...              [3, [14, 14, 14, 12, 11]],
...              [2, [14, 14, 13, 13, 12]],
...              [1, [14, 14, 13, 12, 11]],
...              [0, [14, 13, 12, 11, 9]]]
>>> random.shuffle(all_lists)
>>> pprint.pprint(all_lists)
[[2, [14, 14, 13, 13, 12]],
 [4, [5, 4, 3, 2, 1]],
 [4, [13, 12, 11, 10, 9]],
 [3, [14, 14, 14, 12, 11]],
 [1, [14, 14, 13, 12, 11]],
 [4, [14, 13, 12, 11, 10]],
 [3, [14, 14, 14, 13, 1]],
 [0, [14, 13, 12, 11, 9]]]
>>> all_lists.sort(reverse=True)
>>> pprint.pprint(all_lists)
[[4, [14, 13, 12, 11, 10]],
 [4, [13, 12, 11, 10, 9]],
 [4, [5, 4, 3, 2, 1]],
 [3, [14, 14, 14, 13, 1]],
 [3, [14, 14, 14, 12, 11]],
 [2, [14, 14, 13, 13, 12]],
 [1, [14, 14, 13, 12, 11]],
 [0, [14, 13, 12, 11, 9]]]

“最大”列表最终会显示在all_lists[0]


<强>更新

如果他们在字典中,你只想找到最大的密钥,那么这样的东西应该有用......

my_dict = {1: [2, [14, 14, 13, 13, 12]],
           2: [4, [5, 4, 3, 2, 1]],
           3: [4, [13, 12, 11, 10, 9]],
           4: [3, [14, 14, 14, 12, 11]],
           5: [1, [14, 14, 13, 12, 11]],
           6: [4, [14, 13, 12, 11, 10]],
           7: [3, [14, 14, 14, 13, 1]],
           8: [0, [14, 13, 12, 11, 9]]}

key = max(my_dict.iteritems(), key=lambda x: x[1])[0]
print 'The largest list has key: %r' % key

...打印......

The largest list has key: 6

答案 1 :(得分:0)

如何使用内置max为你做比较,所以它将采取第一项,然后自然地比较列表...然后只需将列表的索引作为参考回到你的dict或者你有什么......

print 'list {}'.format(max((v, i) for i, v in enumerate((list1, list2, list3, list4, list5, list6, list7, list8), start=1))[1])