2012-04-18 22 views
0

我有一個列表。使用列表理解的列表操作

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 

我想用列表解析&想創建輸出:

output1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]] 

output2: 
('value', 1) 
('value', 2) 
' 
' 
('value', 20) 

我可以創建輸出1和輸出2使用的循環,但我沒有想法,我該如何使用列表修真相同。

如果有人知道這一點,請讓我知道。

在此先感謝。

+3

爲什麼你需要列表理解?請發佈你的'for'循環。 – 2012-04-18 13:10:01

+3

輸出2:什麼是輸出2?這是一個列表嗎? – 2012-04-18 13:10:01

+2

@Karoly Horvath output2低於output1,元組對 – Levon 2012-04-18 13:10:47

回答

4
output1 = [a[i:i+4] for i in xrange(0,len(a),4)] 
output2 = [('value',i) for i in a] 
8

對於首先,你可以這樣做

>>> [a[i:i+4] for i in range(0,len(a),4)] 
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]] 

對於第二個,你可以簡單地讀取併產生value元組的使用itertools中的第一項

>>> [('value',i) for i in a] 
[('value', 1), ('value', 2), ('value', 3), ('value', 4), ('value', 5), ('value', 6), ('value', 7), ('value', 8), ('value', 9), ('value', 10), ('value', 11), ('value', 12), ('value', 13), ('value', 14), ('value', 15), ('value', 16), ('value', 17), ('value', 18), ('value', 19), ('value', 20)] 

另一個版本.izip_longest雖然上面更加清晰

list(itertools.izip_longest([],a,fillvalue='value')) 
+1

您使用的另一個版本從我的角度來看是最好的。 – self 2012-04-18 13:27:18

4

這裏的JF Sebastians's grouper,解決了你的第一個問題:

from itertools import izip_longest, repeat 
izip_longest(*[iter(a)]*4, fillvalue=None) 

對於你的第二個:zip(repeat('value'), a)

+4

Downvoter:爲什麼? – Marcin 2012-04-18 13:28:02

+2

我不知道,但它的正確答案。我不知道爲什麼有些人只是downvotes和不給理由 – sam 2012-04-18 13:36:40

+3

我愛第二個:) ... – mshsayem 2012-04-18 13:42:00