Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套列表中第一个元素的总和_Python_List_Numbers - Fatal编程技术网

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

Python 嵌套列表中第一个元素的总和,python,list,numbers,Python,List,Numbers,我试图获取嵌套列表中的第一个元素,并对这些值求和 例如 但是,有时列表中的第一个元素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

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)

想知道我能用什么更好的方式来编写代码吗?

首先,Python有no
null
,在Java、C、JavaScript等语言中,与
null
等价的是
None

其次,我们可以在生成器表达式中使用过滤器。最通用的方法可能是使用
数字进行检查

from numbers import Number

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

首先,Python有no
null
,Java、C#、JavaScript等语言中的
null
等价物是
None

其次,我们可以在生成器表达式中使用过滤器。最通用的方法可能是使用
数字进行检查

from numbers import Number

print sum(i[0] for i in nested_list if isinstance(i[0], Number))
然后只需过滤,在这种情况下,测试的值不是
None

sum(i[0] for i in nested_list if i[0] is not None)
生成器表达式(以及列表、dict和set理解)为循环和if语句接受任意数量的嵌套
。上述内容相当于:

for i in nested_list:
    if i[0] is not None:
        i[0]  # used to sum()
注意这是如何反映您自己的代码的;我没有使用
if not…:pass
else
,而是将测试反转为只允许实际可以求和的值。如果您需要更多带过滤器的循环,只需为
循环添加更多的
,或在相同的从左到右顺序中添加
if
语句嵌套,或使用
将多个测试串在一个
if
过滤器中

在您的特定情况下,如果i[0]
测试
,也就足够了;这将过滤掉
None
0
,但后一个值无论如何都不会对总和产生差异:

sum(i[0] for i in nested_list if i[0])
如果
在循环代码中进行测试,您已经在自己的
中实现了这一点。

只需过滤即可,在这种情况下,测试的值不是
None

sum(i[0] for i in nested_list if i[0] is not None)
生成器表达式(以及列表、dict和set理解)为
循环和if语句接受任意数量的嵌套
。上述内容相当于:

for i in nested_list:
    if i[0] is not None:
        i[0]  # used to sum()
注意这是如何反映您自己的代码的;我没有使用
if not…:pass
else
,而是将测试反转为只允许实际可以求和的值。如果您需要更多带过滤器的循环,只需为
循环添加更多的
,或在相同的从左到右顺序中添加
if
语句嵌套,或使用
将多个测试串在一个
if
过滤器中

在您的特定情况下,如果i[0]
测试
,也就足够了;这将过滤掉
None
0
,但后一个值无论如何都不会对总和产生差异:

sum(i[0] for i in nested_list if i[0])
您已经在自己的
if
测试循环代码中实现了这一点