将列表元素转换为数组

3 投票
2 回答
36104 浏览
提问于 2025-04-18 09:04

我有一个TSV格式的文件,想把它解析成一个数组。

这个文件的格式是 -

jobname1 queue maphours reducehours
jobname2 queue maphours reducehours

代码

with open(file.tsv) as tsv:
    line = [elem.strip().split('\t') for elem in tsv]
    vals = np.asarray(line)
    print vals[0]
    print vals[4]

现在,Vals返回的输出是 -

['job1', 'queue', '1.0', '0.0\n']
['job2', 'queue', '1.0', '0.0\n']

我想把文件中每一行的每个元素都转换成一个数组对象 -

vals[0] = job1 vals[1] = queue vals[2] = 1.0 vals[3] = 0.0 

我该怎么做呢?

2 个回答

2

你确定真的需要一个数组吗?如果你想要一个Numpy数组,@Marcin的回答更全面。

Python其实没有数组这种数据结构(你可以在这里看到Python的数据结构列表)。它有一个“围绕C语言数组的薄包装”。要使用这个C语言数组的包装,你需要指定数组要存储的数据类型(在这里你可以找到类型代码的列表,顶部有列表,底部有示例):

如果你想使用numpy数组,这段代码应该可以工作:

import numpy as np
myarray = np.asarray(yourList)

这段代码来自这里

3

根据我的理解,你想在numpy中创建一个二维数组,文件中的每一行对应数组中的一行,而文件中的每一列对应数组中的一列。如果是这样,你可以按照以下方式操作:

比如,如果你的数据文件是:

jobname1    queue   1   3
jobname2    queue   2   4
jobname41   queue   1   1
jobname32   queue   2   2
jobname21   queue   3   4
jobname12   queue   1   6

那么下面的代码:

with open(file) as tsv:
    line = [elem.strip().split('\t') for elem in tsv]

vals = np.asarray(line) 

会生成如下的vals数组:

[['jobname1' 'queue' '1' '3']
 ['jobname2' 'queue' '2' '4']
 ['jobname41' 'queue' '1' '1']
 ['jobname32' 'queue' '2' '2']
 ['jobname21' 'queue' '3' '4']
 ['jobname12' 'queue' '1' '6']]

如果你想获取工作名称,可以这样做:

print(vals[:,0])
% gives ['jobname1' 'jobname2' 'jobname41' 'jobname32' 'jobname21' 'jobname12']

或者如果你想要包含某个工作的行,可以这样做:

print(vals[np.apply_along_axis(lambda row: row[0] == 'jobname1', 1, vals)])

撰写回答