Как я могу преобразовать список в список списков, если мне нужно пропустить некоторые символы между ними?

#python

Вопрос:

Позволь lst = [13, 1, 14, -64, 9, -64, 14, 5]

Как я могу создать список списков без учета отрицательного числа ?

Результатом было бы [[13,1,14], [9], [14,5]]

 lst = [13, 1, 14, -64, 9, -64, 14, 5] 
lst_index = []
for i,v in enumerate(lst):
    if lst[i] == -64:
        lst_index.append(i)
 

Итак, вот что я сделал, чтобы получить индекс каждого отрицательного числа. Теперь я должен удалить его из списка и создать список списков, но как?? Спасибо!

Ответ №1:

Использование itertools.groupby:

 from itertools import groupby

lst = [13, 1, 14, -64, 9, -64, 14, 5]

res = [list(group) for key, group in groupby(lst, lambda x : x > 0) if key]
print(res)
 

Выход

 [[13, 1, 14], [9], [14, 5]]
 

Или просто:

 current, res = [], []
for e in lst:
    if e < 0:
        if current:
            res.append(current)
            current = []
    else:
        current.append(e)

if current:
    res.append(current)

print(res)
 

Выход

 [[13, 1, 14], [9], [14, 5]]
 

Комментарии:

1. Спасибо, чувак, я бы никогда не додумался до этого !

Ответ №2:

Вы могли бы сделать что-то вроде этого:

 def group_positives(lst):
    result = []
    temp = []
    for value in lst:
        if value > 0:
            temp.append(value)
        else:
            if temp:
                result.append(temp)
                temp = []
    # Also append last temp if not empty
    if temp:
        result.append(temp)
    return result  
 

Ответ №3:

Одно из решений: каждый раз, когда вы находите отрицательное число, добавляйте в новый список пустой список, а затем добавляйте положительные числа к последнему элементу нового списка, см. Ниже.

 lst = [13, 1, 14, -64, 9, -64, 14, 5] 
new_lst = []
start_lst = True
for v in lst :
  if v < 0:
    start_lst = True
  else:
    if start_lst == True :
      start_lst = False
      new_lst.append([])
    new_lst[-1].append(v)

print(new_lst)
 

Ответ №4:

Что я здесь делаю, так это просто добавляю числа в Новый список, пока не найду отрицательное число, если Отрицательное число удовлетворяет Условию else

1-Остановка
2-Добавьте список, который вы должны КОМБИНИРОВАТЬ
3-Перепрыгните через это число по индексу 1

последняя итерация не добавит последний список, потому что нет отрицательного числа, чтобы остановиться и выполнить 3 шага, поэтому я добавил -1 в конце, чтобы перейти к другому

Резюме Добавляйте числа в список, пока не найдете отрицательное число, затем добавьте этот список в комбинацию в конце концов, у вас будет список, но вы не добавите его в комбинацию, так как вы не сталкивались с отрицательным числом ( поэтому я добавил -1 )

  lst = [13, 1, 14, -64, 9, -64, 14, 5]
    
    
    def Test(V):
        V.append(-1)
        new = []
        Combo = []
        for index, value in enumerate(V):
            if(lst[index] > 0):
                new.append(lst[index])
            else:
                index  = 1
                Combo.append(new)
                new = list()
    
        return Combo


    z = Test(lst)
    print(z)
 

Выход

    [[13, 1, 14], [9], [14, 5]]