簡體   English   中英

如何比較列表中的元素?

[英]How to compare elements in list-of-lists?

我有一個包含元素列表的列表(每個內部列表中的元素數量不同),我想將同一索引中的所有元素分組到單獨的組中並返回每個組中的最大值:例如,

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)

output 我得到的是

[(89, 106, 87)]

您可以將itertools.zip_longestfillvalue=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()函數中的最小值)

嘗試使用每個子列表的索引創建一個字典,然后將values轉換為新列表,然后將 map 設置為最大值:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM