python - 如何将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)
解决方案
这应该可以解决问题:
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']]
此实现首先构建一个字典,其长度为键,对应长度的单词列表为其值。接下来,它遍历所有长度,如果没有单词具有该长度,则生成一个空列表,否则生成单词列表。
推荐阅读
- react-bootstrap - 使用反应引导程序确认密码
- javascript - 在数组元素中搜索子字符串并返回索引
- javascript - 如何从数据网格中获取行和列
- python - “DiscordUser”对象不可迭代
- java - 尝试更新到“org.jooq:jooq-codegen-maven:3.15.1”时构建失败
- vb.net - 如何在符号和提取文本之间进行正则表达式?
- firebase - 如何检测失败的流 Firebase 订阅?
- .net - 以现有实际解决方案为例,正确处理视频流
- c++ - 使用函数 GetFileAttributesA(Windows) 时 C++ 会查看什么目录
- cplex - 如何使用 OPL 在 CPLEX 中编写最小最大目标函数?