基本上我的问题是你有一个包含'无'的列表你将如何尝试检索列表的总和.下面是我尝试的一个例子,它不起作用,我收到错误: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
Run Code Online (Sandbox Code Playgroud)
Ale*_*yev 39
你可以使用filter功能
>>> sum(filter(None, [1,2,3,None]))
6
Run Code Online (Sandbox Code Playgroud)
从评论更新
通常filter用法是filter(func, iterable),但None作为第一个参数传递是一个特殊情况,在Python文档中描述.引用:
如果function为None,则假定为identity函数,即删除所有可迭代的false元素.
None使用filter以下方法在求和之前删除(和零)元素:
>>> k = sum(filter(None, chain.from_iterable(my_list)))
>>> k
20
Run Code Online (Sandbox Code Playgroud)
要了解其工作原理,请参阅以下文档filter:
filter(function, iterable)
iterable根据function返回true的元素构造一个列表.iterable可以是序列,支持迭代的容器,也可以是迭代器.如果iterable是字符串或元组,则结果也具有该类型; 否则它总是一个列表.如果是Nonefunction,则假定为identity函数,即删除所有可迭代的false元素.注意,这
filter(function, iterable)相当于[item for item in iterable if function(item)]if函数不是None,[item for item in iterable if item]如果函数是None.
假设您想将其视为None零,一个简单的方法是
sum(x if x is not None else 0 for x in chain.from_iterable(my_list))
Run Code Online (Sandbox Code Playgroud)
另一个建议是:
from itertools import chain
k = sum(x for x in chain.from_iterable(my_list) if x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17323 次 |
| 最近记录: |