当我使用带有推导表达式的enumerate时,为什么我会看到None元素?
当我使用带有推导表达式的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)]
当我们使用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元素的问题。