-1

リストを少し試してみましたが、リストの他のすべての部分を追加したいと思います。

リストがあると言う

[2,4,8,9,4,2]

そして、私は2と2を一緒に追加したい

[2+4,8+9,4+2] so I get the list [6,17,6]

リストの長さが異なる場合でも、それを行う方法はありますか? (簡単にするために、リストには常に2の倍数の数字があると仮定しているので、それは可能です)

この質問に答えるために何を検索すればよいかわかりません

4

5 に答える 5

6

問題を分解してください - あなたは2つのことをしたいです:

  1. リストをペア (グループ) に分割します。
  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 要素のすべてのグループを合計したい場合は、グループ サイズを変更するだけです。

于 2013-07-19T01:46:38.990 に答える
6
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
于 2013-07-19T01:47:14.463 に答える
2
>>> L = [2, 4, 8, 9, 4, 2]
>>> from operator import add
>>> list(map(add, *[iter(L)]*2))
[6, 17, 6]
于 2013-07-19T01:47:18.430 に答える
2

あまり創造的ではありませんが、一般的な解決策は次のようになります。

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]
于 2013-07-19T02:00:53.947 に答える
1

gnibblerarshajii のソリューションを進める

>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]
于 2013-07-19T01:56:40.730 に答える