在Python 2.x中访问数组列表数组中的元素

时间:2017-09-24 08:36:37

标签: arrays python-2.7 list

考虑使用numpy.genfromtxt()提取的以下数据集:

    data[0:3]
array([('T', 2,  8, 3, 5, 1,  8, 13, 0, 6,  6, 10, 8, 0, 8, 0,  8),
       ('I', 5, 12, 3, 7, 2, 10,  5, 5, 4, 13,  3, 9, 2, 8, 4, 10),
       ('D', 4, 11, 6, 8, 6, 10,  6, 2, 6, 10,  3, 7, 3, 7, 3,  9)], 
      dtype=[('f0', 'S1'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '<i8'), ('f8', '<i8'), ('f9', '<i8'), ('f10', '<i8'), ('f11', '<i8'), ('f12', '<i8'), ('f13', '<i8'), ('f14', '<i8'), ('f15', '<i8'), ('f16', '<i8')])

我正在尝试使用以下代码从前2个数组中检索字母,但是它给出了第一个完整数组而不是每个数组中的第一个元素。

data[:2][0]

2 个答案:

答案 0 :(得分:1)

问题是数组的内容是元组。因此,当您要求output = [] for i in range(2): output += data[:2][i][0] 时,它会返回元组列表中的第0项,而不是每个元组的第0项。使用以下代码段:

sizeof (tab1k_p) / sizeof(*tab1k_p);

希望我帮助过。

答案 1 :(得分:0)

这是一个结构化数组,1d有很多字段。字段按名称访问,而不是“列”编号:

In [618]: data
Out[618]: 
array([(b'T', 2,  8, 3, 5, 1,  8, 13, 0, 6,  6, 10, 8, 0, 8, 0,  8),
       (b'I', 5, 12, 3, 7, 2, 10,  5, 5, 4, 13,  3, 9, 2, 8, 4, 10),
       (b'D', 4, 11, 6, 8, 6, 10,  6, 2, 6, 10,  3, 7, 3, 7, 3,  9)],
      dtype=[('f0', 'S1'), ('f1', '<i8'), ('f2', '<i8'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<i8'), ('f6', '<i8'), ('f7', '<i8'), ('f8', '<i8'), ('f9', '<i8'), ('f10', '<i8'), ('f11', '<i8'), ('f12', '<i8'), ('f13', '<i8'), ('f14', '<i8'), ('f15', '<i8'), ('f16', '<i8')])

一个元素或记录(显示为元组)

In [619]: data[0]
Out[619]: (b'T', 2, 8, 3, 5, 1, 8, 13, 0, 6, 6, 10, 8, 0, 8, 0, 8)

一个字段,一个数组:

In [620]: data['f0']
Out[620]: 
array([b'T', b'I', b'D'],
      dtype='|S1')

多个字段,返回另一个结构化数组(如下一个问题所示,Access range of elements from an array Python

In [621]: data[['f1','f2']]
Out[621]: 
array([(2,  8), (5, 12), (4, 11)],
      dtype=[('f1', '<i8'), ('f2', '<i8')])