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

#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. Идеально! Спасибо!