为什么要使用列表变量来建立索引,而不能使用文字列表?

问题描述 投票:0回答:1

在下面的代码中,我有一个数组arr,我想对整数0-9进行一次热编码。我已将此数组放入另一个数组arrs,它将容纳多个数组(一个数组用于简化操作)。我想遍历这些数组(再次,这里只有一个)和如下所示的一键编码。 for循环可以正常工作。但是我发现,如果我“手动”尝试for循环内的语法,则会收到TypeError:列表索引必须是整数或切片,而不是元组。到底是怎么回事?我怀疑这是由于编译器的工作方式而发生的?

import numpy as np

arr = [0,1,4,7,9]
arrs = [arr]
results = np.zeros((len(arrs), 10))
print(results) # [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]


for i, seq in enumerate(arrs):
    print(i) # 0
    print(seq) # [0, 1, 4, 7, 9]
    results[i, seq] = 1
print(results) # [[1. 1. 0. 0. 1. 0. 0. 1. 0. 1.]]

#When I do the above "manually" I get a TypeError
results = [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
results[0,[0, 1, 4, 7, 9]] = 1
print(results)
python indexing typeerror
1个回答
0
投票

x[y]等效于x.__getitem__(y)。没有普遍禁止使用列表作为索引;这只是list.__getitem__的禁止。其他类型可以自由接受或拒绝他们喜欢的索引。

© www.soinside.com 2019 - 2024. All rights reserved.