gpt4 book ai didi

python - 如何按元素长度拆分排序列表

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:55 25 4
gpt4 key购买 nike

我有一个列表列表,它按子列表的长度排序。例如

[[str], [str1, str2], [str1, str2], [str1, str2, str3], [str1, str2, str3],...]

我想将此列表拆分为仅包含具有相同长度的子列表的子列表。例如

[[[str], [str], [str]],  [[str1, str2], [str1, str2], [str1, str2]], ...]

我想知道是否有比下面我的方法更有效的方法,希望代码更少。

child_list = []
new_list = []
old_list = [['e3510000'], ['e2512001'], ['e3510000'], ['e92d4010'],
['e3a0b000', 'e3a0e000'], ['e92d4030', 'e59f5054'],
['e59f3038', 'e3530000'], ['e1a0c00d', 'e92dd800']]

# length of child
length = 1
for idx, i in enumerate(old_list):
if idx == len(old_list)-1:
child_list.append(i)
new_list.append(child_list.copy())
elif length == len(i):
child_list.append(i)
elif length < len(i):
new_list.append(child_list.copy())
del child_list[:]
child_list.append(i)
length = len(i)

输出:

[[['e3510000'], ['e2512001'], ['e3510000'], ['e92d4010']],
[['e3a0b000', 'e3a0e000'], ['e92d4030', 'e59f5054'],
['e59f3038', 'e3530000'], ['e1a0c00d', 'e92dd800']]]

最佳答案

您可以使用 itertools.groupby为了按长度对 old 中的列表进行分组。请注意,如果原始列表已经按照您的示例中的长度排序,则无需在此处排序。

from itertools import groupby
[list(v) for k,v in groupby(sorted(old_list, key=len), key=len)]

输出

[[['e3510000'], ['e2512001'], ['e3510000'], ['e92d4010']],
[['e3a0b000', 'e3a0e000'],
['e92d4030', 'e59f5054'],
['e59f3038', 'e3530000'],
['e1a0c00d', 'e92dd800']]]

关于python - 如何按元素长度拆分排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com