簡體   English   中英

Python列表依賴於長度

[英]Python list of lists depending on length

我有下面的列表,我需要將水果列表中的字符串分配到停止列表中,具體取決於它們的長度。

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)

假設你需要盡可能多的內部列表,你需要正確地輸入所有單詞:

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

我不確定是否將國王勇敢一起分類,正如你的問題所做的那樣,是有意還是無意。 我是故意的。

fruit = ['an', 'king', 'be', 'brave']
stall = [[],[],[],[]]
for f in fruit:
        stall[min(len(f),4)-1].append(f)

這會給你

>>> stall
[[], ['an', 'be'], [], ['king', 'brave']]

一個簡單的O(n)方法:

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)

使用defaultdict的替代方法:

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)

產量

[[], ['an', 'be'], [], ['king'], ['brave']]

一種方法可能是遵循。 首先,你得空列表的大小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']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM