Как создать несколько списков из другого списка на основе условий / точек останова в Python? - PullRequest
0 голосов
/ 12 февраля 2019

Я ищу способ создать несколько списков из одного большого списка.

Что я хочу сделать, это отфильтровать различные группы цифр (количество фруктов, продаваемых каждую неделю), чтобы сформировать список.Каждая группа цифр должна быть в отдельном списке, когда она встречает строку «******», которая указывает, где должна заканчиваться каждая группа.

Example list:

['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']

Пока у меня есть это:

list = []
for i in mainList:
        if i.isdigit():
            list.append(i)
    print(list)

Однако мой код печатает все в одном списке следующим образом:

#Ouput = ['1000', '2000', '2500', '5000', '150'] 

Как можно разделить вывод на отдельные списки, чтобы каждая группа фруктов печаталась в отдельных «блоках» и всеиз них являются частью большого списка?

Результат, который я ищу, должен выглядеть следующим образом:

[['1000', '2000', '2500'], ['5000', '150']]

Пока я пробовал это:

for i in mainList:
   if '******' in i:
       break
   if i != '******':
       result.append(i)

Но это возвращает тот же список, и я ожидал, что он разорвет цикл в первой '******' точке останова.Я пытаюсь отделить каждую часть списка после разделителя '******'.

Буду признателен за любую помощь, которую смогу получить.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Если вы хотите использовать циклы for, это сработает, если гарантируется, что список будет иметь правильный формат.

mylist = ['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']
terminator = '******'

result = []
sublist = []
for item in mylist:
    if item == terminator:
        result.append(sublist)
        sublist = []
    elif item.isdigit():
        sublist.append(item)

print(result)

Распечатка из этого - то, что вы хотели:

[['1000', '2000', '2500'], ['5000', '150']]
0 голосов
/ 12 февраля 2019

Ну, попробуйте это:

mylst = ['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']

finallst = []
digits = []

for i in mylst:
  if i.isdigit():
    digits.append(i)
  else:
    digits = []
  if digits not in finallst and digits:
    finallst.append(digits)

print(finallst)

То, что я делаю там:

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

Самый питонический способ, который я могу придумать, это использовать itertools.groupby :

from itertools import  groupby

lst = ['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']

result = [list(group) for k, group in  groupby(lst, key=str.isdigit) if k]
print(result)

Выход

[['1000', '2000', '2500'], ['5000', '150']]

В качестве альтернативы вы можете использовать цикл for:

result = []
start = True
for element in lst:
    if start and element.isdigit():  # start group
        result.append([element])
        start = False
    elif element.isdigit():  # just append to current group
        result[-1].append(element)
    else:  # close group
        start = True

print(result)

Выход

[['1000', '2000', '2500'], ['5000', '150']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...