Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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_Iteration_List Comprehension - Fatal编程技术网

Python 列出此代码的理解或更有效的方法

Python 列出此代码的理解或更有效的方法,python,list,iteration,list-comprehension,Python,List,Iteration,List Comprehension,我有以下代码。对于a中1、4范围内包含项目的所有列表,其项目长度/数量相加,然后打印 a = [[1, 2, 3], None, [1.23, 4.56], ['a', 'b', 'c'], None, None] sum = 0 for i in a[1, 4): if a[i]: sum += len(i) print(sum) 如何简化中间的三行代码以提高流程的效率?我可以用列表理解来完成吗?是的,可以用生成器表达式来完成。这是一个与列表理解具有类似语法的构

我有以下代码。对于
a
中1、4范围内包含项目的所有列表,其项目长度/数量相加,然后打印

a = [[1, 2, 3], None, [1.23, 4.56], ['a', 'b', 'c'], None, None] 
sum = 0

for i in a[1, 4):
    if a[i]:
        sum += len(i)

print(sum)

如何简化中间的三行代码以提高流程的效率?我可以用列表理解来完成吗?

是的,可以用生成器表达式来完成。这是一个与列表理解具有类似语法的构造

s = sum(len(i) for i in a if i)
a = [[1, 2, 3], None, [1.23, 4.56], ['a', 'b', 'c'], None, None] 
sum_ = sum(len(L) for L in a if L is not None)
print(sum_)
在这种情况下,您实际上不需要任何结果列表,因此您通常不会在这里使用列表理解

sum([len(element) for element in a if element])

这应该可以做到~

您可以使用
isinstance
检查子元素是否是列表,因此如果列表中包含的值不是
None
,它仍然有效

 sum(len(x) for x in a[1:5] if isinstance(x,list))
a[1:5]
是元素
None、[1.23,4.56]、'a','b','c',None
1-4


如果您希望前四个元素的索引从
0
开始,那么使用
a[0:4]
,它包括开始索引
0
,直到但不包括索引
4

,当您所做的只是对值求和时,不需要在这里建立一个列表。