我有長度L
的列表,與一些隨機值:薩姆元件
list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
和相同長度的另一列表,以及布爾值
list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
我想要總和list1
的值,其中 list2
的對應元素是1
。 (在這種情況下6 + 8 + 3)
有沒有一種簡單的方法來使它在Python?
我有長度L
的列表,與一些隨機值:薩姆元件
list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
和相同長度的另一列表,以及布爾值
list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
我想要總和list1
的值,其中 list2
的對應元素是1
。 (在這種情況下6 + 8 + 3)
有沒有一種簡單的方法來使它在Python?
是,使用sum
和itertools.compress
:
>>> from itertools import compress
>>> sum(compress(list1, list2))
17
說明:compress()
需要兩個iterables,併產生從第一要素,如果相應的第二個元素是真理。 sum()
......好吧,你大概可以猜到。
您可以使用itertools.compress
與sum
:
>>> import itertools
>>> list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
>>> list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
>>> list(itertools.compress(list1, list2))
[6, 8, 3]
>>> sum(itertools.compress(list1, list2))
17
你也可以做一個有條件的理解與zip
:
>>> list1 = [3, 1, 1, 6, 8, 3, 7, 4, 8, 4]
>>> list2 = [0, 0, 0, 1, 1, 1, 0, 0, 0, 0]
>>> sum(item for item, flag in zip(list1, list2) if flag)
17
的if flag
檢查相應的項目不爲零。如果你想明確檢查1
:
>>> sum(item for item, flag in zip(list1, list2) if flag == 1)
17
你做了什麼?你有沒有試圖解決這個問題? 也可能重複[如何添加幾個數字列表的相應元素?](http://stackoverflow.com/questions/11280536/how-can-i-add-the-corresponding-elements-of-幾家名單-的號碼) – cyberbemon 2014-09-02 15:58:16