我有以下代码。对于包含项目的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)
如何简化中间三行代码以提高流程效率?我可以用列表理解来做到这一点吗?
答案 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'], None
或1 - 4
:
如果您希望前四个元素索引从0
开始,请使用a[0:4]
,其中包括起始索引0
以及最多但不包括索引4