有什麼方法可以使列表理解中的兩個或多個項目出列。具有多個變量的列表理解
I.e.我想要做這樣的事情:
>>> q = [1, 2, 3, 4]
>>> r = [x+y for x, y in q]
** This does not work though :(**
預計:
>>> r
[3, 7]
有什麼方法可以使列表理解中的兩個或多個項目出列。具有多個變量的列表理解
I.e.我想要做這樣的事情:
>>> q = [1, 2, 3, 4]
>>> r = [x+y for x, y in q]
** This does not work though :(**
預計:
>>> r
[3, 7]
的建議您可以從itertools文檔中使用的石斑魚recipe:
>>> 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)
非常好的通用解決方案:) –
對於像'[1,2,3, 4,5]'你可以使用'[x + y代表x,y在石斑魚(2,q,0)]'中。 – akaRem
作品,如果列表中只有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))
另一種解決方案
>>> [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]
+1是啊!事實上'總和'是一個更好的方式來做到這一點,是時候刪除我的解決方案。 –
特定問題的好解決方案:)但是,我正在尋找一些通用的東西。 –
對於奇數長度列表預期溶液?例如,'q = [1,2,3,4,5]' –
奇數長度列表 - >某種錯誤......只要它有些模糊不清,就不會過於臃腫。 –