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

问题描述

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

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,c,d,f,i,j]

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

有什么办法可以改回来吗?

解决方法

您已经说过“想要从第一行、第二行和第三行中提取前三个值”。因此,不是分别创建三个列表 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,30],[ 20,55,1,1]])

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

>>> K[:3,:3].flatten()
array([  5,102,150,110])
>>> K[:3,:3].flatten().tolist()
[5,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))
,

如果您想实现 [a,b,c,d,e,f,h,i,j],您可以执行以下操作:

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