Python 无法多次访问反向列表
Python list reversed can't be accessed more than once
谁能给我解释一下?
import numpy as np
arr = reversed(np.arange(11))
print(list(arr))
print(list(arr))
print(list(arr))
这段代码的输出是:
为什么我不能多次访问 arr 变量?
reversed
方法
Return a reverse iterator over the values of the given sequence
一旦迭代器被消耗,它就是空的
如果你消费它并存储在一个列表中,那么你可以多次使用它
import numpy as np
arr = list(reversed(np.arange(11)))
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reversed
returns 一个 iterator。当您第一次对其调用 list
时,您对其进行了迭代直到最后,它不再返回任何内容。因此,如果您再次调用 list
,它会立即显示“停止迭代”并且您会得到一个空列表。
修复是在您第一次调用 list
时存储它:
>>> arr = list(reversed(np.arange(11)))
>>> arr
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
不过,在 numpy 的上下文中,您不会强制转换为 list
,而是在 numpy 域中反转:
>>> arr = np.arange(11)[::-1]
或
>>> arr = np.arange(10, -1, -1)
或
>>> arr = np.flip(np.arange(11))
或
>>> arr = np.flipud(np.arange(11))
获得
>>> arr
array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
这与reversed()
的return有关。你预计它是一个列表,但它是一个迭代器
import numpy as np
arr = reversed(np.arange(11))
>>> print(list(arr))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr))
[]
>>> print(list(arr))
[]
在第一个 运行 之后,迭代器为空。您可以通过从迭代器创建一个列表然后打印它来防止这种情况:
arr2 = list(reversed(np.arange(11)))
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
谁能给我解释一下?
import numpy as np
arr = reversed(np.arange(11))
print(list(arr))
print(list(arr))
print(list(arr))
这段代码的输出是:
为什么我不能多次访问 arr 变量?
reversed
方法
Return a reverse iterator over the values of the given sequence
一旦迭代器被消耗,它就是空的
如果你消费它并存储在一个列表中,那么你可以多次使用它
import numpy as np
arr = list(reversed(np.arange(11)))
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(list(arr)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
reversed
returns 一个 iterator。当您第一次对其调用 list
时,您对其进行了迭代直到最后,它不再返回任何内容。因此,如果您再次调用 list
,它会立即显示“停止迭代”并且您会得到一个空列表。
修复是在您第一次调用 list
时存储它:
>>> arr = list(reversed(np.arange(11)))
>>> arr
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
不过,在 numpy 的上下文中,您不会强制转换为 list
,而是在 numpy 域中反转:
>>> arr = np.arange(11)[::-1]
或
>>> arr = np.arange(10, -1, -1)
或
>>> arr = np.flip(np.arange(11))
或
>>> arr = np.flipud(np.arange(11))
获得
>>> arr
array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
这与reversed()
的return有关。你预计它是一个列表,但它是一个迭代器
import numpy as np
arr = reversed(np.arange(11))
>>> print(list(arr))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr))
[]
>>> print(list(arr))
[]
在第一个 运行 之后,迭代器为空。您可以通过从迭代器创建一个列表然后打印它来防止这种情况:
arr2 = list(reversed(np.arange(11)))
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print(list(arr2))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]