数组列表的访问元素

2024-09-30 04:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由数组组成的数据列表。我希望能够访问这些数组的每个元素。然而,当我试图访问其中一个列表的每个元素时,我反而返回了一个完整的列表,即

>>> vec_data[0]
'[array([129.1203,  65.5152, -15.7962]), array([ -75.8793,  -27.2767, -136.3468]), array([  98.54  , -110.7603,  187.9171]), array([ 83.9628, 126.839 , -61.4756]), array([ -63.1397, -216.348 , -165.1392]), array([ 32.8174,  45.1573, 146.6547]), array([65.2439, 82.8289, 13.3427]), array([  -8.481 ,  -38.3387, -138.1786]), array([-223.8824,   86.1375,   -2.5446]), array([211.8308,  51.894 ,  89.5078]), array([  21.4793, -177.2219,   -0.573 ])]\n'

然后我尝试了vec_数据[0][0],希望返回[129.1203,65.5152,-15.7962],但结果是:

>>> vec_data[0][0]
'['

有人能提供一些关于我如何从这个列表中获得我想要的输出的见解吗

为了解决这个问题,我附上了下面数据的一个小摘录

['[array([129.1203,  65.5152, -15.7962]), array([ 83.094 , 135.5689,  57.7153]), array([  97.337 , -158.2453,   26.0811]), array([  31.3163,  121.7492, -100.4891]), array([ 60.797 ,  20.4243, -45.3821]), array([  -1.9805, -145.0236,  -57.6177]), array([116.4612,  18.3822, -99.8011]), array([38.402 , 13.7894, 85.094 ]), array([-321.057 ,  147.0128,  173.035 ]), array([  99.6488,  -74.9626, -110.7028]), array([ 134.3792, -110.4547,   -8.8729])]\n', '[array([ -67.876  ,  -28.46764, -118.16426]), array([ 58.368  , 107.64964,  90.12756]), array([ 102.6007, -165.1867,   26.1187]), array([  39.58716,  124.4238 , -106.68995]), array([ 58.19804,  18.7423 , -40.15905]), array([  -4.9479, -151.5177,  -56.3511]), array([ 99.946 ,  27.8355, -89.1489]), array([51.115, -3.302, 80.843]), array([-326.252 ,  170.7748,  168.0119]), array([ 120.9826,  -91.66  , -116.6699]), array([114.7974, -82.5404,   2.0438])]\n', '[array([ -28.196  ,  -14.69983, -149.5836 ]), array([ 54.399  , 108.75513, 106.2178 ]), array([  93.0723, -146.1217,   27.1268]), array([  15.1398,  104.9325, -128.3365]), array([ 89.2691,   2.3471, -21.0604]), array([ -15.2423, -155.4835,  -28.2395]), array([ 86.8051, -18.2533, -74.2126]), array([73.194 , 60.0037, 67.0507]), array([-314.68  ,  170.6532,  145.9454]), array([  69.4455,  -98.9357, -135.0111]), array([147.9465, -88.8198,  36.5976]

编辑:

使用revliscano建议的方法:

import re
import json


string = vec_data[0]
r = re.sub('array\((\[.+?\])\)', lambda x: x.groups()[0], string)
r = r.replace('\n', '')
list_ = json.loads(r)

给我vec_数据[0]的期望输出,但是,我想让它在所有vec_数据上循环-有什么建议吗


Tags: 数据方法importrejson元素编辑列表
3条回答

如果您有一种不将这些数据作为字符串放入程序的方法,那将是理想的,但是我相信下面的方法可以将您的数据转换为更好的格式

import numpy as np
array = np.array
vec_data = eval(vec_data)

在使用示例代码执行此操作之后,我得到了一个数组列表

如果您想改为列表格式,可以将array = np.array替换为array = list,但从输入数据的外观来看,它可能最初是一个numpy数组

免责声明:下面的答案与numpy数组没有任何关系,但是它找到了一种方法来解析vec_data[0]中的字符串,这样它就可以被访问并用作列表,我认为这就是您要做的

我们将使用regex(通过re模块)和json模块来实现这一点

如果vec_data的所有项都具有类似的值(需要解析的字符串,就像vec_data[0]),则可以将此解决方案用作函数,并使用列表理解来迭代vec_data,对其每个项调用该函数:

import re
import json


def parse_array(string):
    r = re.sub('array\((\[.+?\])\)', lambda x: x.groups()[0], string)
    r = r.replace('\n', '')
    list_ = json.loads(r)
    return list_


new_vec_data = [parse_array(string) for string in vec_data]

print(new_vec_data[0][0])的输出:

[129.1203, 65.5152, -15.7962]

尝试使用vec_data[0][0][0]访问第一个列表的第一个元素

相关问题 更多 >

    热门问题