如何扩展列表以处理诸如'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''
答案 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)