根据字符串的长度将字符串列表拆分为子列表

时间:2019-03-30 03:52:23

标签: python list

例如,如果我有一个列表

['My', 'Is', 'Name', 'Hello', 'William']

我该如何操作它才能创建新列表

[['My', 'Is'], ['Name'], ['Hello'], ['William']]


4 个答案:

答案 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']]

希望对您有所帮助,如有其他问题,请发表评论。 :)