![](/img/trans.png)
[英]count the sum of the nested list which contains strings and ints in python
[英]Sum a list which contains 'None' using Python
基本上我的問題是說您有一個包含“無”的列表,您將如何嘗試檢索列表的總和。 下面是一個我試過的例子,它不起作用,我得到錯誤: TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
。 謝謝
def sumImport(self):
my_list = [[1,2,3,None],[1,2,3],[1,1],[1,1,2,2]]
k = sum(chain.from_iterable(my_list))
return k
您可以使用filter
功能
>>> sum(filter(None, [1,2,3,None]))
6
從評論更新
通常, filter
使用是filter(func, iterable)
,但是將第一個參數作為None
傳遞是一種特殊情況,在Python文檔中有描述。 引用:
如果function為None,則假定為identity函數,即刪除所有可迭代的false元素。
使用filter
在求和之前刪除None
(和零)元素:
>>> k = sum(filter(None, chain.from_iterable(my_list)))
>>> k
20
要了解其工作原理,請參閱filter
文檔 :
filter(function, iterable)
從
iterable
那些元素構造一個列表,該function
返回true。iterable
可以是序列,支持迭代的容器,也可以是迭代器。 如果iterable是字符串或元組,則結果也具有該類型; 否則它總是一個列表。 如果function為None
,則假定為identity函數,即刪除所有可迭代的false元素。注意,
filter(function, iterable)
相當於[item for item in iterable if function(item)]
如果函數不是None
和[item for item in iterable if item]
如果函數是None
。
另一個建議是:
from itertools import chain
k = sum(x for x in chain.from_iterable(my_list) if x)
假設你想將None
視為零,一個簡單的方法就是
sum(x if x is not None else 0 for x in chain.from_iterable(my_list))
你總是可以選擇只寫你想要的循環:
k = 0
for sublist in my_list:
for val in sublist:
if val is not None:
k += val
但是,了解filter
當然也沒有什么壞處。
顯然,這相當於過濾器:
k = sum([x for x in chain.from_iterable(my_list) if x])
這使我免於記住另一個功能。 :P
只需使用 sum 和 map:
sum(map(lambda x: x or 0, [1,2,3,None]))
# 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.