2024-04-23 23:22:33 发布
网友
我正在尝试获取嵌套列表中的第一个元素并对值进行汇总。在
例如
nested_list = [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']] print sum(i[0] for i in nested_list)
但是,有时列表中的第一个元素None会被替换
None
想知道我能用什么更好的方法来编写这个?在
首先,Python没有null,在Java、C、JavaScript等语言中,null的等价物是None。在
null
其次,我们可以在生成器表达式中使用过滤器。最常见的可能是检查numbers:
numbers
from numbers import Number print sum(i[0] for i in nested_list if isinstance(i[0], Number))
Number通常会确保我们接受ints、longs、floats、complexes等。因此,我们不必跟踪Python世界中的所有数值对象。在
Number
int
long
float
complex
由于列表也可能包含空子列表,因此我们也可以检查:
只需过滤然后,在本例中测试非None的值:
sum(i[0] for i in nested_list if i[0] is not None)
生成器表达式(以及list、dict和set理解)接受任意数量的嵌套for循环和if语句。以上相当于:
for
if
注意这是如何镜像您自己的代码的;我没有使用if not ...: pass和else,而是将测试倒置为只允许您实际可以求和的值。如果需要更多带过滤器的循环,只需按相同的从左到右添加更多的for循环或if语句来嵌套,或者使用and或{}在一个if筛选器中将多个测试串在一起。在
if not ...: pass
else
and
在您的特定情况下,只测试if i[0]也就足够了;这将过滤掉None和{},但后一个值无论如何不会对总和产生影响:
if i[0]
sum(i[0] for i in nested_list if i[0])
您已经在自己的if测试循环代码中处理了这个问题。在
首先,Python没有
null
,在Java、C、JavaScript等语言中,null
的等价物是None
。在其次,我们可以在生成器表达式中使用过滤器。最常见的可能是检查
numbers
:Number
通常会确保我们接受int
s、long
s、float
s、complex
es等。因此,我们不必跟踪Python世界中的所有数值对象。在由于列表也可能包含空子列表,因此我们也可以检查:
^{pr2}$只需过滤然后,在本例中测试非
None
的值:生成器表达式(以及list、dict和set理解)接受任意数量的嵌套
^{pr2}$for
循环和if
语句。以上相当于:注意这是如何镜像您自己的代码的;我没有使用}在一个
if not ...: pass
和else
,而是将测试倒置为只允许您实际可以求和的值。如果需要更多带过滤器的循环,只需按相同的从左到右添加更多的for
循环或if
语句来嵌套,或者使用and
或{if
筛选器中将多个测试串在一起。在在您的特定情况下,只测试},但后一个值无论如何不会对总和产生影响:
if i[0]
也就足够了;这将过滤掉None
和{您已经在自己的
if
测试循环代码中处理了这个问题。在相关问题 更多 >
编程相关推荐