#python #arrays #pandas #numpy
#python #массивы #pandas #numpy
Вопрос:
Как я могу расширить список, чтобы позаботиться о таких элементах, как ‘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″
Комментарии:
1. можете ли вы создать образец фрейма данных? для лучшего понимания и ожидаемого результата
2. В конечном счете, я хотел бы преобразовать этот список в 3D-массив. На данный момент список выглядит следующим образом: ‘38359*0’, ‘0.121’, 0.129′, ‘487*0’, и т.д.
3. можете ли вы опубликовать это в te question также, как вы хотите, чтобы результат выглядел
4. Я только что отредактировал его, спасибо!
5. у него все еще нет ожидаемого результата. пожалуйста, добавьте это тоже. Спасибо
Ответ №1:
Сначала вам нужно повторить список строк и выбрать преобразование только тех строк, в которых есть *. Затем вы добавляете столько повторений числа, сколько необходимо для временного списка, наконец, вы добавляете эти элементы в выходной список с помощью 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)
Комментарии:
1. Идеально! Спасибо!