私はこのように一列に並んだ数字のリストを持っています:
0
1
0
2
0
4
約数千行あります
結果が次のようになるように、3行ごとにそれらを合計したいと思います。
1
6
私はすでにこの行でリストを個々の整数にしています:
k = map(lambda s: s.strip(), k)
integer = map(int, k)
どうすれば合算できますか?
私はこのように一列に並んだ数字のリストを持っています:
0
1
0
2
0
4
約数千行あります
結果が次のようになるように、3行ごとにそれらを合計したいと思います。
1
6
私はすでにこの行でリストを個々の整数にしています:
k = map(lambda s: s.strip(), k)
integer = map(int, k)
どうすれば合算できますか?
リストをnのグループに分割する別の方法のように、ハタを使用します。
import itertools
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return itertools.izip_longest(*args, fillvalue=fillvalue)
map(sum, grouper(3, interger, 0))
上記のコードはpython2.xを想定していることに注意してください。itertools.zip_longest
3.xの場合は、代わりに使用する必要があります。
デモ:
>>> example = [0, 1, 0, 2, 0, 4]
>>> map(sum, grouper(3, example, 0))
[1, 6]
あなたはすでに番号のリストを持っていると言うので、
result = [sum(data[i:i+3])for i in range(0, len(data),3)]
例えば、
data = range(1, 16) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
収量
[6, 15, 24, 33, 42]
これはおそらく最もpythonicです:
>>> my_list = iter(my_list)
>>> map(sum, zip(my_list, my_list, my_list))
[1, 6]
itertools grouper
レシピを使う
>>> from itertools import izip_longest
>>> def grouper(n, iterable, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
>>> with open('data.txt') as fin:
for g in grouper(3, fin):
print sum(map(int, g))
1
6
Grouperとすべての凝ったものは機能します...しかし、この場合、単純なリスト内包が機能します。そして、それは素晴らしくて速いはずです!:)
>>> q = range(9)
>>> q
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> [sum(q[3*n:3*n+3]) for n in range(len(q)/3)]
[3, 12, 21]
これにより、3つのグループに収まらない残りの数字がスキップされます。
>>> def sum_three(iterable_):
... iterable_ = iter(iterable_)
... while True:
... yield next(iterable_) + next(iterable_) + next(iterable_)
...
>>> my_list = [0, 1, 0, 2, 0, 4, 99, 1]
>>> list(sum_three(my_list))
>>> [1, 6]