我正在尝试获取嵌套列表中的第一个元素并对值求和。
例如。
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)
生成器表达式(以及 list、dict 和 set comprehensions)采用任意数量的嵌套 for 循环和 if 语句。以上相当于:
for i in nested_list:
if i[0] is not None:
i[0] # used to sum()
请注意这如何反射(reflect)您自己的代码;我没有使用 if not ...: pass 和 else,而是将测试反转为只允许您实际可以求和的值。如果您需要更多带过滤器的循环,只需添加更多的 for 循环或 if 语句,从左到右嵌套,或者使用 and 或 或 将多个测试串在一个 if 过滤器中。
在您的特定情况下,只需测试 if i[0] 就足够了;这将过滤掉 None 和 0,但后一个值无论如何都不会对总和产生影响:
sum(i[0] for i in nested_list if i[0])
您已经在自己的循环代码中的 if 测试中解决了这个问题。
