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)

forループを使用してoutput1とoutput2を作成できますが、同じものにリスト内包表記を使用する方法がわかりません。

誰かがこれを知っているなら、親切に私に知らせてください。

前もって感謝します。

4

3 に答える 3

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

value2番目の場合、最初のアイテムとしてタプルを単純に読み取って生成できます

>>> [('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)]

itertools.izip_longest を使用する別のバージョンですが、上記の方がより読みやすいです

list(itertools.izip_longest([],a,fillvalue='value'))
于 2012-04-18T13:11:12.897 に答える
4
output1 = [a[i:i+4] for i in xrange(0,len(a),4)]
output2 = [('value',i) for i in a]
于 2012-04-18T13:11:11.133 に答える
4

これは、最初の問題を解決するJF Sebastians の grouperです。

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

2番目の場合:zip(repeat('value'), a)

于 2012-04-18T13:14:48.570 に答える