我正在尝试获取嵌套列表中的第一个元素并汇总值。
例如。
nested_list = [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']]
print sum(i[0] for i in nested_list)
但是,有时列表中的第一个元素会None
代替
nested_list = [[1, 'a'], [None, 'b'], [3, 'c'], [4, 'd']]
new = []
for nest in nested_list:
if not nest[0]:
pass
else:
new.append(nest[0])
print sum(nest)
想知道我编写此代码的更好方法是什么?
就在过滤然后,在不属于值这种情况下的测试None
:
sum(i[0] for i in nested_list if i[0] is not None)
生成器表达式(以及列表,字典和集合理解)采用任意数量的嵌套for
循环和if
语句。以上等同于:
for i in nested_list:
if i[0] is not None:
i[0] # used to sum()
注意这如何反映您自己的代码;而不是使用if not ...: pass
和else
,我倒置了测试以仅允许您实际上可以求和的值。如果您需要使用过滤器的更多循环,或者仅使用一个从左至右添加更多for
循环或if
语句以嵌套顺序,或者在单个过滤器中使用and
或or
将多个测试串在一起即可if
。
在您的特定情况下,只需进行测试if i[0]
就足够了;这会过滤掉None
和0
,但是后者的值无论如何不会影响总和:
sum(i[0] for i in nested_list if i[0])
您已经if
在循环代码中通过自己的测试来解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句