0

我有一堆表格列表:

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。

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

4

2 回答 2

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
于 2013-06-15T15:32:47.843 回答
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])
于 2013-06-15T15:36:51.927 回答