2

我有一个包含元素列表的列表(每个内部列表中的元素数量不同),我想将同一索引中的所有元素分组到单独的组中并返回每个组中的最大值:例如,

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)]
4

2 回答 2

7

您可以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-infinitymax()

于 2021-05-13T23:38:42.523 回答
2

尝试创建一个以每个子列表的索引为键的字典,然后将其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]
于 2021-05-13T23:34:03.893 回答