Python列表列表取决于长度

时间:2019-01-10 15:38:52

标签: python list

我有下面的列表,我需要根据水果的长度将水果列表中的字符串分配到摊位列表中。

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)

4 个答案:

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