如何扩展列表以处理诸如'38359 * 0'之类的元素,我想将其表示为38359元素等于0?

问题描述 投票:0回答:1

如何扩展列表以处理诸如'38359 * 0'之类的元素,我想将其表示为38359元素等于0?

当我遇到带有*运算符的元素(例如x * y)时,我想插入x个值为y的新元素。

我正在加载文本文件,这些值以字符串形式出现;我想将列表转换为浮点数以便对它们进行数学运算,但无法弄清楚如何扩展列表以处理这些压缩值。

最后,我想将此列表转换为3d数组。目前,列表如下所示:'38359 * 0','0.121',0.129','487 * 0'等。

这是我到目前为止的代码。

counter = 0
for z in range(0,k):
    for y in range (0,j):
        for x in range (0,i): 
            poros_np[x,y,z] = poros[counter]
            counter += 1

但是,我使用*运算符在值上出错。

'ValueError:无法将字符串转换为float:'38359 * 0.000000''

python arrays pandas numpy
1个回答
0
投票

首先,您需要迭代字符串列表并选择仅转换其中包含*的字符串。然后,添加时间列表所需数量的重复次数,最后使用expand将此元素添加到输出列表中。

def transform(string, lst):
    repetitions, number  = string.split('*')
    tmp_lst = []
    for i in range(int(repetitions)):
        tmp_lst.append(float(number))
    lst.extend(tmp_lst)

string_list = ['38359*0', '0.121', '0.129', '487*0']
out_list = []
for s in string_list:
    if '*' in s:
        transform(s, out_list)
    else:
        out_list.append(float(s))

print(out_list)
© www.soinside.com 2019 - 2024. All rights reserved.