首页 > 解决方案 > 如何将x个x长度的单词添加到不同的嵌套列表中

问题描述

我有一项工作需要我根据单词的长度将单词添加到相应的列表中。即所有长度为 1 的单词将进入列表 1,长度为 2 的单词将进入列表 2,依此类推...

以下是我目前拥有的代码。如您所见,我创建了一个包含 L 个空桶的列表,其想法是让每个长度的单词进入相应的桶。这就是我卡住的地方。在不知道会有多少桶的情况下,我不知道如何添加它们。我对 Python 很陌生,任何帮助将不胜感激!

def empty_buckets(n): 
    """Return a list with n empty lists. Assume n is a positive integer. """ 
    buckets = [] 
    for bucket in range(n): 
        buckets.append([]) 
    return buckets 

计算所有单词的最大长度 L。

longest = ''
    for L in words:
        if len(L) > len(longest):
            longest = L
    return longest

创建 L 个空列表(桶)的列表。

buckets = empty_buckets(L)

标签: pythonpython-3.x

解决方案


这应该可以解决问题:

def bucket_words_by_length(words):
    d = {}
    [d.setdefault(len(word), []).append(word) for word in words]
    buckets = [d.get(k, []) for k in range(max(d.keys()) + 1)]
    return buckets

例如,

>>>words = ['hi', 'my', 'friend', 'how', 'are', 'you']
>>>bucket_words_by_length(words)
[[], [], ['my', 'hi'], ['you', 'how', 'are'], [], [], ['friend']]

此实现首先构建一个字典,其长度为键,对应长度的单词列表为其值。接下来,它遍历所有长度,如果没有单词具有该长度,则生成一个空列表,否则生成单词列表。


推荐阅读