我已經嘗試了一下列表,我想添加列表的其他部分。Python:我可以在列表中添加其他整數嗎?
說我有一個列表
[2,4,8,9,4,2]
,我想添加兩個和兩個在一起,就像
[2+4,8+9,4+2] so I get the list [6,17,6]
有一個可能的方式做到這一點,即使該列表的長度變化? (爲便於起見,我認爲這個列表總是以二的倍數位,因此這將是可能做到)
我不知道我可以搜索來回答這個問題
我已經嘗試了一下列表,我想添加列表的其他部分。Python:我可以在列表中添加其他整數嗎?
說我有一個列表
[2,4,8,9,4,2]
,我想添加兩個和兩個在一起,就像
[2+4,8+9,4+2] so I get the list [6,17,6]
有一個可能的方式做到這一點,即使該列表的長度變化? (爲便於起見,我認爲這個列表總是以二的倍數位,因此這將是可能做到)
我不知道我可以搜索來回答這個問題
推進上gnibbler's和arshajii's solution
>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]
打破你的問題向下 - 您想要做兩件事:
第一容易與the grouper recipe from itertools來達到的:
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)
[sum(group) for group in grouper([2, 4, 8 ,9, 4, 2], 2)]
主要優點該方法是,不費力,擴展到任何組的大小。如果你想對每一組100個元素進行求和,那只是改變組的大小。
這確實是我更喜歡的答案。我喜歡它,因爲假設迭代所採用的iterable不會泄漏副作用,那麼grouper函數就是「純」的。我也認爲它在概念上更易於理解 - 至少一次定義了這樣的分組函數。 – user2246674
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
+1我必須贊成這個,因爲我已經在其他地方使用了這個,但直到現在纔將它忘了:) –
雖然它起作用,但手動推進迭代器的想法(當它也是隱式高級的時候)並不是我的首選。 – user2246674
@ user2246674,爲什麼不。它是定義的行爲,並提供了一個美麗的解決方案 –
>>> 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]
這很整潔! +1 – inspectorG4dget
這是迭代塊的最不受歡迎的方式 - 它僅適用於序列,而不是任意迭代。迭代索引通常是一個糟糕的主意,而且非常難看。 –
你應該先試一下。這很簡單 – JBernardo