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

时间:2014-08-22 14:15:01

标签: python list iteration list-comprehension

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

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)

如何简化中间三行代码以提高流程效率?我可以用列表理解来做到这一点吗?

4 个答案:

答案 0 :(得分:2)

是的,您可以使用生成器表达式来完成它。这是一种与列表推导具有类似语法的构造。

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_)

在这种情况下,您实际上并不需要任何结果列表,因此您通常不会在此处使用列表推导。

答案 1 :(得分:1)

s = sum(len(i) for i in a if i)

答案 2 :(得分:0)

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

这应该做到〜

答案 3 :(得分:0)

您可以使用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'], None1 - 4

如果您希望前四个元素索引从0开始,请使用a[0:4],其中包括起始索引0以及最多但不包括索引4