我有下面的列表,我需要根据水果的长度将水果列表中的字符串分配到摊位列表中。
fruit = ['an', 'king', 'be', 'brave']
stall = [[],[],[],[]]
所以结果应该是这样
stall = [[ ],['an', 'be'],[ ],['king', 'brave']]
我尝试了很多方法,甚至尝试创建一个新列表来查看我要去哪里,但什至没有出现任何问题。有人可以指出我要去哪里了吗?我以前从来不需要添加到列表列表。
i = 0
s = stall[i]
for j in fruit:
if(len(j)) == i+1:
s.append(j)
i += 1
print(stall)
答案 0 :(得分:4)
假设您想要尽可能多的内部列表以正确地输入所有单词:
fruit = ['an', 'king', 'be', 'brave']
stall = [
[element for element in fruit if len(element) == i+1]
for i in range(len(fruit) + 1)
]
stall
现在将是[[], ['an', 'be'], [], ['king'], ['brave']]
。
答案 1 :(得分:2)
我不确定是否像您的问题一样将 king 和 brave 归类在一起是故意的。我假设是故意的。
fruit = ['an', 'king', 'be', 'brave']
stall = [[],[],[],[]]
for f in fruit:
stall[min(len(f),4)-1].append(f)
这会给你
>>> stall
[[], ['an', 'be'], [], ['king', 'brave']]
答案 2 :(得分:1)
一种简单的 O(n)方法:
window.requestFileSystem(cordova.file.externalRootDirectory + "Downloads", 0, function(fs) {
console.log('file system open: ' + fs.name);
...
}
使用defaultdict的替代方法:
fruit = ['an', 'king', 'be', 'brave']
lookup = {}
for word in fruit:
lookup.setdefault(len(word), []).append(word)
stall = [lookup.get(i, []) for i in range(1, max(lookup) + 1)]
print(stall)
输出
from collections import defaultdict
fruit = ['an', 'king', 'be', 'brave']
lookup = defaultdict(list)
for word in fruit:
lookup[len(word)].append(word)
stall = [lookup.get(i, []) for i in range(1, max(lookup) + 1)]
print(stall)
答案 3 :(得分:1)
可能采用以下一种方法。首先,从stall
中最大字符串的维度中获取空列表fruit
的大小。然后,您只需将水果附加到嵌套列表中的相应位置即可。
之所以使用len(f)-1
是因为python中的索引从0开始。
fruit = ['an', 'king', 'be', 'brave']
stall = [[] for _ in range(len(max(fruit, key=len)))]
for f in fruit:
stall[len(f)-1].append(f)
print (stall)
# [[], ['an', 'be'], [], ['king'], ['brave']]