例如,如果我有一个列表
['My', 'Is', 'Name', 'Hello', 'William']
我该如何操作它才能创建新列表
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
答案 0 :(得分:6)
您可以使用itertools.groupby:
>>> from itertools import groupby
>>> l = ['My', 'Is', 'Name', 'Hello', 'William']
>>> [list(g) for k, g in groupby(l, key=len)]
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
但是,如果列表尚未按照长度排序,则需要先按照 @recnac 在以下评论中提到的方式对其进行排序:
>>> l2 = ['My', 'Name', 'Hello', 'Is', 'William']
>>> [list(g) for k, g in groupby(sorted(l2, key=len), key=len)]
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
答案 1 :(得分:2)
您可以构建一个将单词长度映射到匹配单词列表的字典,然后获取该字典值的列表:
l = ['My', 'Is', 'Name', 'Hello', 'William']
d = {}
for w in l:
d.setdefault(len(w), []).append(w)
print(list(d.values()))
这将输出:
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
答案 2 :(得分:2)
大家好,我也找到了解决方案,虽然这不是最简洁的方法,但我认为值得分享
data = ['My', 'Is', 'Name', 'Hello', 'William']
dict0 = {}
for index in data:
if len(index) not in dict0:
dict0[len(index)] = [index]
elif len(index) in dict0:
dict0[len(index)] += [index]
list0 = []
for i in dict0:
list0.append(dict0[i])
print(list0)
答案 3 :(得分:1)
您可以使用dict
来按长度记录字符串组,此处使用defaultdict
来方便。
from collections import defaultdict
str_list = ['My', 'Is', 'Name', 'Hello', 'William']
group_by_len = defaultdict(list)
for s in str_list:
group_by_len[len(s)].append(s)
result = list(group_by_len.values())
输出:
[['My', 'Is'], ['Name'], ['Hello'], ['William']]
希望对您有所帮助,如有其他问题,请发表评论。 :)