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

Python 根据字符串的长度将字符串列表拆分为子列表,python,list,Python,List,例如,如果我有一份清单 ['My', 'Is', 'Name', 'Hello', 'William'] 如何操作它,以便创建新列表 [['My', 'Is'], ['Name'], ['Hello'], ['William']] 您可以使用: 但是,如果列表尚未按长度排序,则需要首先按照以下注释中的对其进行排序: >>> l2 = ['My', 'Name', 'Hello', 'Is', 'William'] >>> [list(g) for k

例如,如果我有一份清单

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

如何操作它,以便创建新列表

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


您可以使用:

但是,如果列表尚未按长度排序,则需要首先按照以下注释中的对其进行排序:

>>> l2 = ['My', 'Name', 'Hello', 'Is', 'William']
>>> [list(g) for k, g in groupby(sorted(l2, key=len), key=len)]
[['My', 'Is'], ['Name'], ['Hello'], ['William']]

您可以使用
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())
输出:


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

您可以构建一个dict,将单词长度映射到匹配单词列表,然后获取dict值列表:

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

大家好,我也找到了一个解决方案,虽然它不是我认为值得分享的最简洁的

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)

每个分组都有长度范围吗?字符串长度是任意的,字符串的数量也是任意的。到目前为止,您尝试了什么?顺便说一句,为了达到你的目标,你在应用什么规则?我想我现在有个办法用字典来实现。当列表不按len排序时,它会出错,例如
['My','Name','Hello','is','William']
将输出
['My'],['Name'],['Hello'],['is'],['William']
,你必须先排序它。通过先排序,这使得这个解决方案的平均时间复杂度为O(n log n)而不是O(n)。所以这里有一个问题,哪个解决方案更好,DICT还是排序和分组,考虑时间和空间?我不知道:)我已经解决了我的问题,但接受了你的,因为这是最短的。
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)