我可以设置一个函数来调用列表中的特定索引吗?

Can I set a function to call a specific index from a list?

我有 n 个长度为 p 的列表(实际上是数组,但我将它们视为列表)。我想从第一行、第二行和第三行中提取前三个值。这是我目前所拥有的:

k0= K[0][0:3]
k1= K[1][0:3]
k2= K[2][0:3]

哪里

k0= [a,b,c]
k1= [d,e,f]
k2= [g,h,i]

这样

concatenated_ko = []

for j in range(0,3):
    k = "k"+str(j)
    concatenated_ko.append(k)

print(concatenated_ko)

当前打印

['k0','k1','k2']

但应该打印

[a,b,c,d,e,f,h,i,j]

编辑:我认为归根结底是我最初使用了一个从 <class 'numpy.ndarray'> 变为 <class 'str'> 的对象。通过 np.ndarray(k) 强制将类型从字符串更改为数组也不起作用。

有什么办法改回来吗?

如果你想达到[a,b,c,d,e,f,h,i,j]你可以这样做:

concatenated_ko = []
for arr in [k0, k1, k2]:
   concatenated_ko += [*arr]

你说过你“想从第一行、第二行和第三行中提取前三个值”。因此,与其分别创建三个列表 k0k1k2,您可以将其放入迭代中并直接对 K 进行操作,方法是先将前 3 个切片列。

A.

concatenated_ko = []
for row in K[:3]:
    concatenated_ko.extend(row[:3])

B. 或者,如果你想使用索引:

concatenated_ko = []
for idx in range(3):
    concatenated_ko.extend(K[idx][:3])

C. 假设 K 是一个 5x5 数组:

>>> K
array([[  5,  12,  10,  70,   4],
       [102,   6, 120,  60,  22],
       [150, 100, 110,   2, 150],
       [ 15,  20,  22,  70,  30],
       [ 20,  55,   1,  70,   1]])

然后要将前 3 行的前 3 列作为单个数组获取,您可以使用 ndarray.flatten():

>>> K[:3, :3].flatten()
array([  5,  12,  10, 102,   6, 120, 150, 100, 110])
>>> K[:3, :3].flatten().tolist()
[5, 12, 10, 102, 6, 120, 150, 100, 110]

另一种选择,推荐:要对原始代码进行小幅修改,请使用 eval 从变量名中获取列表,然后使用 extend 而不是 append:

# with k0, k1, k2 setup as per your question
for j in range(0,3):
    k = "k"+str(j)
    concatenated_ko.extend(eval(k))