嵌套列表中第一个元素的总和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套列表中第一个元素的总和相关的知识,希望对你有一定的参考价值。

我试图获取嵌套列表中的第一个元素并总结值。

例如。

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 ...: passelse,我将测试反转为仅允许实际可以求和的值。如果您需要更多带过滤器的循环,或者使用forif将单个and过滤器中的多个测试串联在一起,只需在同一个从左到右的嵌套顺序中添加更多or循环或if语句。

在您的具体情况下,只需测试if i[0]就足够了;这会过滤掉None0,但后者的值无论如何都不会对总和产生影响:

sum(i[0] for i in nested_list if i[0])

您已经在循环代码中的自己的if测试中接近了这个。

另一答案

首先,Python没有null,相当于Java,C#,javascript等语言中的nullNone

其次,我们可以在生成器表达式中使用过滤器。最通用的可能是用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世界中我们自己数值的所有对象。

由于列表也可能包含空子列表,我们也可以检查:

from numbers import Number

print sum(i[0] for i in nested_list if i and isinstance(i[0], Number))

以上是关于嵌套列表中第一个元素的总和的主要内容,如果未能解决你的问题,请参考以下文章

使用 lambda 函数在嵌套列表中查找总和

如何获取列表元素的总和? [关闭]

Android 嵌套片段方法

使用包含嵌套列表的现有列的 出现总和创建一个新列

在嵌套对象中获取总和

共享元素转换:活动到嵌套在另一个活动中的片段