Как разбить массив Python при каждом появлении заданной строки? - PullRequest
0 голосов
/ 07 мая 2020

Я составляю код в Python 3.7, в котором мне нужно разбить массив на куски.

Массив чем-то похож на следующий:

['1.60500002', '1.61500001', '1.625', '1.63499999','NO',
'1.73500001','1.745', 'NO','2.04500008', '2.05499983']

Мне интересно создавать n разных фрагментов (в данном случае 3) каждый раз, когда встречается строка 'NO'. Тогда выходной массив должен быть примерно таким:

[['1.60500002', '1.61500001', '1.625', '1.63499999'],
['1.73500001', '1.745'],
['2.04500008', '2.05499983']]

Может кто-нибудь мне помочь?

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Вы можете попробовать выполнить итерацию по списку, проверяя, является ли элемент числом с плавающей запятой, и если да, то добавляя его в список, а если не создавая новый список. Просто сложите все списки, которые вы составили, и все готово.

def split_str(inp):
    array_of_array = []
    arr = []
    for a in inp:
        try:
            float(a)
            arr.append(a)
        except Exception:
            array_of_array.append(arr)
            arr = []
    array_of_array.append(arr)
    return array_of_array
0 голосов
/ 07 мая 2020

Поскольку единственный индикатор разделения - «НЕТ», это должно быть проще. Все, что вам нужно сделать, это проверить «НЕТ» и затем создать новый список. Вам также необходимо обработать сценарий первого элемента, поскольку это может быть «НЕТ» или число, но создание нового списка, если это «НЕТ», не требуется

Чтобы создать новый список внутри списка , вы можете сделать examplelist.append([])

Затем, чтобы получить доступ к определенному списку c внутри списка, вы можете указать номер списка в квадратных скобках перед использованием append (). например. examplelist[list_number].append(whatever)

Вот код, который я придумал:

#Input
array = ['1.60500002', '1.61500001', '1.625', '1.63499999','NO','1.73500001', '1.745', 'NO','2.04500008', '2.05499983']
#Declaring
result = [] #empty list
list_number = 0 #to access a specific list inside a list
starting_element = True #var to handle starting scenario
for element in array:
    #starting scenario
    if starting_element:
        result.append([])
        if element != 'NO':
            result[list_number].append(element)
        starting_element = False
    #NO scenario
    elif element == 'NO':
        list_number += 1
        result.append([])
    #Number scenario
    elif element != 'NO':
        result[list_number].append(element)

print(result)
0 голосов
/ 07 мая 2020

l oop над массивом, и если элемент «NO», мы разбиваем массив до элемента «NO» и добавляем его к выходу. если мы дошли до конца, последняя часть будет от последнего «НЕТ» до конца.

my_array = ['1.60500002', '1.61500001', '1.625', '1.63499999','NO','1.73500001', '1.745', 'NO','2.04500008', '2.05499983']
    output = []
    counter = 0
    start = 0
    for item in my_array:
        if item == "NO":
            output.append(my_array[start:counter])
            start = counter + 1
        if counter == len(my_array) - 1:
            output.append(my_array[start:counter + 1])
        counter += 1
...