4

リスト内包表記で 2 つ以上のアイテムをデキューする方法はありますか。

つまり、私はこのようなことをしたいと思います:

>>> q = [1, 2, 3, 4]
>>> r = [x+y for x, y in q]
** This does not work though :( **

期待される:

>>> r
[3, 7]
4

3 に答える 3

6

itertoolsドキュメントの grouperレシピを使用できます。

>>> from itertools import izip_longest
>>> [x + y for x, y in grouper(2,q)]
[3, 7]

レシピのソースコードは次のとおりです。

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
于 2012-05-04T09:50:48.257 に答える
1

リストに 2 つのグループのみが含まれている場合に機能します。は機能し[1,2,3,4,5]ませんが、機能します[1,2,3,4,5,6]

>>> q = [1, 2, 3, 4]
>>> [x+y for x, y in zip(*[iter(q)]*2)]
[3, 7]

また@gnibblerによって提案されたように

>>> map(sum, zip(*[iter(q)]*2))
于 2012-05-04T09:47:26.597 に答える
0

別の解決策

>>> [sum(q[i:i+2]) for i in range(0,len(q),2)]
[3, 7]
>>> q=[1,2,3,4,5]
>>> [sum(q[i:i+2]) for i in range(0,len(q),2)]
[3, 7, 5]
于 2012-05-04T09:54:05.250 に答える