如何比较列表列表中的元素?
How to compare elements in list-of-lists?
我有一个包含元素列表的列表(每个内部列表中的元素数量不同),我想将同一索引中的所有元素分组到单独的组中,并且 return 中的最大值每组:
例如,
elements = [[89, 213, 317], [106, 191, 314], [87]]
我想像这样对这些元素进行分组,
groups = [[89,106,87],[213,191],[317,314]]
预期结果是组中每个列表的最大值:106、213 和 317
我尝试使用以下代码对元素进行分组:
w = zip(*elements)
result_list = list(w)
print(result_list)
我得到的输出是
[(89, 106, 87)]
尝试创建一个以每个子列表的索引为键的字典,然后将 values
转换为新列表,然后映射到最大值:
from collections import defaultdict
elements = [[89, 213, 317], [106, 191, 314], [87]]
i_d = defaultdict(list)
for sub in elements:
for i, v in enumerate(sub):
i_d[i].append(v)
maxes = list(map(max, i_d.values()))
print(maxes)
i_d
:
defaultdict(<class 'list'>, {0: [89, 106, 87], 1: [213, 191], 2: [317, 314]})
maxes
:
[106, 213, 317]
您可以将 itertools.zip_longest
与 fillvalue=float("-inf")
一起使用:
from itertools import zip_longest
elements = [[89, 213, 317], [106, 191, 314], [87]]
out = [max(t) for t in zip_longest(*elements, fillvalue=float("-inf"))]
print(out)
打印:
[106, 213, 317]
注意:zip()
在这里不起作用,因为(如您所述)每个内部列表中的元素数量不相同。使用 zip_longest()
时,缺失的元素将替换为 fillvalue
,在本例中为 -infinity
(并且 -infinity
将始终是 max()
函数中的最低值)
我有一个包含元素列表的列表(每个内部列表中的元素数量不同),我想将同一索引中的所有元素分组到单独的组中,并且 return 中的最大值每组: 例如,
elements = [[89, 213, 317], [106, 191, 314], [87]]
我想像这样对这些元素进行分组,
groups = [[89,106,87],[213,191],[317,314]]
预期结果是组中每个列表的最大值:106、213 和 317
我尝试使用以下代码对元素进行分组:
w = zip(*elements)
result_list = list(w)
print(result_list)
我得到的输出是
[(89, 106, 87)]
尝试创建一个以每个子列表的索引为键的字典,然后将 values
转换为新列表,然后映射到最大值:
from collections import defaultdict
elements = [[89, 213, 317], [106, 191, 314], [87]]
i_d = defaultdict(list)
for sub in elements:
for i, v in enumerate(sub):
i_d[i].append(v)
maxes = list(map(max, i_d.values()))
print(maxes)
i_d
:
defaultdict(<class 'list'>, {0: [89, 106, 87], 1: [213, 191], 2: [317, 314]})
maxes
:
[106, 213, 317]
您可以将 itertools.zip_longest
与 fillvalue=float("-inf")
一起使用:
from itertools import zip_longest
elements = [[89, 213, 317], [106, 191, 314], [87]]
out = [max(t) for t in zip_longest(*elements, fillvalue=float("-inf"))]
print(out)
打印:
[106, 213, 317]
注意:zip()
在这里不起作用,因为(如您所述)每个内部列表中的元素数量不相同。使用 zip_longest()
时,缺失的元素将替换为 fillvalue
,在本例中为 -infinity
(并且 -infinity
将始终是 max()
函数中的最低值)