【发布时间】:2019-12-20 12:41:58
【问题描述】:
这行得通:
x = ['foo', 'bar']
y = [*x]
print(y) # prints ['foo', 'bar']
但这不是:
x = ['foo', 'bar']
y[*x] # raises SyntaxError (not NameError!)
如何在索引时解包元组?
以下是我想使用这种方法的两个示例,但我更想了解为什么 *-unpacking 在一般索引中似乎不受支持。
import numpy as np
def lookup(a: np.ndarray, coordinates: tuple) -> float:
return a[*coordinates]
a1 = np.zeros((2, 2))
print(lookup(a1, (0, 1)) # Should print 0
a2 = np.zeros(2, 2, 2))
print(lookup(a2, (0, 0, 1)) # Should print 0
或
from typing import Tuple
NUM_DIMENSIONS = 2 # Might change at a later point in time
# Should be equivalent to Tuple[float ,float]
Result = Tuple[*([float] * NUM_DIMENSIONS)]
def get() -> Result:
...
【问题讨论】:
-
在你的第二个 sn-p
y没有作为变量引入,所以y[*x]没有任何意义,因此语法错误。 -
您希望索引如何与
['foo', 'bar']一起工作?索引需要一个单独的整数,而不是字符串列表 -
你能举一个例子吗?
-
@quamrana:不,缺少变量声明会引发
NameError,而不是SyntaxError。试试not_declared[0]。 -
@Chris_Rands:对于可能是真的列表。但是 NumPy 数组、Pandas DataFrames 和
typing泛型具有更复杂的索引接口,并且支持foo[a, b, c]之类的东西。请参阅我的示例。