リストを少し試してみましたが、リストの他のすべての部分を追加したいと思います。
リストがあると言う
[2,4,8,9,4,2]
そして、私は2と2を一緒に追加したい
[2+4,8+9,4+2] so I get the list [6,17,6]
リストの長さが異なる場合でも、それを行う方法はありますか? (簡単にするために、リストには常に2の倍数の数字があると仮定しているので、それは可能です)
この質問に答えるために何を検索すればよいかわかりません
リストを少し試してみましたが、リストの他のすべての部分を追加したいと思います。
リストがあると言う
[2,4,8,9,4,2]
そして、私は2と2を一緒に追加したい
[2+4,8+9,4+2] so I get the list [6,17,6]
リストの長さが異なる場合でも、それを行う方法はありますか? (簡単にするために、リストには常に2の倍数の数字があると仮定しているので、それは可能です)
この質問に答えるために何を検索すればよいかわかりません
問題を分解してください - あなたは2つのことをしたいです:
1 つ目は、 itertools の grouper レシピを使用して簡単に達成できます。
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
2 つ目sum()
はリスト内包表記です。
[sum(group) for group in grouper([2, 4, 8 ,9, 4, 2], 2)]
この方法の主な利点は、労力をかけずに、任意のサイズのグループにスケーリングできることです。100 要素のすべてのグループを合計したい場合は、グループ サイズを変更するだけです。
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
>>> L = [2, 4, 8, 9, 4, 2]
>>> from operator import add
>>> list(map(add, *[iter(L)]*2))
[6, 17, 6]
あまり創造的ではありませんが、一般的な解決策は次のようになります。
def get_chunk_sums(a, chunk_size):
return [sum(a[i: i+chunk_size]) for i in xrange(0, len(a), chunk_size)]
結果:
>>> get_chunk_sums([2,4,8,9,4,2], 2)
[6, 17, 6]
>>> get_chunk_sums([2,4,8,9,4,2], 3)
[14, 15]
gnibblerとarshajii のソリューションを進める
>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]