当我使用带有推导表达式的enumerate时,为什么我会看到None元素?

12 浏览
0 Comments

当我使用带有推导表达式的enumerate时,为什么我会看到None元素?

举例来说,当我使用列表推导时,会出现[None, None, None]的元素:\n

[print(i,v) for i,v in enumerate([1, 2, 3])]
0 1
1 2
2 3
[None, None, None]

\n但是使用常规的for循环时,没有[None, None, None]的元素:\n

for i,v in enumerate([1, 2, 3]):
  print(i,v)
0 1
1 2
2 3
list(enumerate([1, 2, 3]))
[(0, 1), (1, 2), (2, 3)]

0
0 Comments

当我们使用enumerate和推导表达式时,为什么会看到None元素?

问题原因:

当我们使用推导表达式时,例如[print(x) for x in ...],这将创建一个由多次调用print()的返回值组成的列表。但是,print()函数的返回值是None。是的,它在屏幕上显示内容,但实际上返回的是None。因此,列表中会有很多None元素。

解决方法:

要解决这个问题,我们可以使用一个不会返回None的函数替代print()函数,或者使用一个过滤器来删除列表中的None元素。

以下是两种解决方法的示例代码:

1. 使用一个不会返回None的函数替代print()函数:

# 使用一个不会返回None的函数替代print()函数,例如len()函数
lst = [len(x) for x in ...]

2. 使用一个过滤器来删除列表中的None元素:

# 使用一个过滤器来删除列表中的None元素,例如使用if语句过滤掉None元素
lst = [x for x in ... if x is not None]

通过使用上述解决方法,我们可以避免在使用enumerate和推导表达式时看到None元素的问题。

0