2017-10-13 103 views
2

我經常遇到一個問題,我試圖從字符串中列出一定長度的列表。嵌套列表理解

這是一個例子,我有一個字符串,但想使長度爲3的列表的列表:

x = '123456789' 

target_length = 3 

new = [i for i in x] 
final = [new[i:i+target_length] for i in range(0, len(x), target_length)] 

print(final) 

輸出:

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] 

所以,這個工作,但感覺如此笨重。

有沒有更好的方法將這些參數合併成一行或者你認爲會使代碼不可讀?

回答

2

如果你想這樣做在同一行,你可以只創建您的理解裏面的清單:

x = '123456789' 
target_length = 3 

[list(x[i:i+target_length]) for i in range(0, len(x), target_length)] 
>> [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] 
0

這確實是在同一行:

f2 = [[x[(j * target_length) + i] for i in range(target_length)] for j in range(target_length)] 
+0

這是假設的長度列表是'target_length ** 2',它在這個例子中,但只是巧合。 –

+1

是的。 AK47的答案是更好的答案 – triphook

+0

您可以通過在外部循環中使用'range(len(x)// target_length)'來修復或至少改進它,那麼它至少對'x'的長度起作用,它是目標長度。 –