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

时间:2019-04-03 17:51:18

标签: python arrays pandas numpy

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

当我遇到带有此*运算符的元素(例如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:无法将字符串转换为浮点型:'38359 * 0.000000''

1 个答案:

答案 0 :(得分: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)