#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]]