Как расширить список, чтобы позаботиться о таких элементах, как «38359 * 0», которые я хочу представить как 38359 элементов, равных 0? - PullRequest
0 голосов
/ 03 апреля 2019

Как я могу расширить список, чтобы позаботиться о таких элементах, как '38359 * 0', которые я хочу представить как 38359 элементов, равных 0?

Когда я сталкиваюсь с элементом с этим * оператором (например, x * y), я хотел бы вставить x новых элементов со значением y.

Я загружаю текстовые файлы с этими значениями в виде строк; Я хочу преобразовать список в числа с плавающей точкой, чтобы выполнить математические расчеты, но не могу понять, как расширить список, чтобы позаботиться об этих сжатых значениях.

В конечном счете, я хотел бы преобразовать этот список в трехмерный массив. На данный момент список выглядит следующим образом: «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 голосов
/ 03 апреля 2019

Сначала вам нужно перебрать список строк и выбрать для преобразования только те строки, в которых есть *. Затем вы добавляете столько же повторений числа, сколько необходимо во временный список, и, наконец, добавляете эти элементы в выходной список с помощью расширения.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...