【问题标题】:Comparing an arbitrary number of lists element by element逐个元素比较任意数量的列表
【发布时间】:2013-06-15 15:11:53
【问题描述】:

我有一堆表格列表:

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。

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

【问题讨论】:

  • 你的问题不太清楚......但是尝试使用带有*args的函数来处理任意数量。我对这个功能无能为力,因为当你说“我必须找到多少元素我也不会知道的差异”时,我真的不知道你想要什么
  • 预期输出是什么?您是否尝试根据内容对列表进行排序?
  • 这些都是独立的变量吗?为什么这些值不在字典或列表中?如果这些项目是列表中的列表(而不是单独的变量),这些项目是否按第一个值排序?
  • Martijn,这些都在一个仅由整数索引的字典中,因此 list1 真正对应于 mydict[1]。从长远来看,我想返回与返回的列表对应的字典键,但这是下一步。

标签: python list compare sublist


【解决方案1】:

如果您尝试根据列表的内容对列表进行排序,那么您描述的比较行为是 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

【讨论】:

    【解决方案2】:

    如何使用内置的max 为您进行比较,所以它会采用第一项,然后自然比较列表...然后只需将列表的索引作为参考返回到您的 dict 或不管你有什么......

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 2016-08-08
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2016-06-01
      • 2021-01-22
      相关资源
      最近更新 更多