субзанеси в список в python

я хочу сделать в python субсписок со следующей функцией: сначала у меня есть список с этими элементами

lista = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

и создавать следующий субсписок:

lista_2 = ((1, 2, 3), (4, 5, 6), (7, 8, 9), (10))

Возможно делать это в python? Я нуждаюсь в алгоритме для app в Джанго. Большое спасибо!

2
задан 14.09.2019, 09:05
3 ответа

Ты можешь создавать генератор, который возвращал бы элементы твоего iterable n в n, пока были достаточные, и что, когда уже нет достаточных, возвратил тех, которые превысили

def grouper(iterable, n):
     i=0
     while i<len(iterable)-n:
        yield tuple(iterable[i:i+n])
        i+=n
     yield tuple(iterable[i:])

, ты это Можешь использовать в твоем случае asà - (мы делаем n=3)

lista = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
lista_2 = tuple(grouper(lista, 3))

Результат в lista2 serà ¡:

((1, 2, 3), (4, 5, 6), (7, 8, 9), (10,))
3
ответ дан 11.11.2019, 01:07
  • 1
    Спасибо! я изучаю python и сталкиваюсь тем, что есть функции, которые я не знаю в глубине (как yield например). Функционируй совершенно и справедливое то, в чем он нуждался для моего Веб проекта. – Agughost 15.09.2019, 07:13
  • 2
    @Agughost yield - tí я шифрую в implementació n генераторов, которые являются функциями, которые возвращают данные " один в uno" (в каждых yield). Эти функции ты можешь использовать их потом в цикле for, как я сделал. Так или иначе уже ты увидел, что есть má s способы это решать. solució n Chema используй expresió n порождающая , которые не используют yield и - aú n má s краткий. Для этого случая он má s приведенная в соответствие, что мой solució n. Другие случаи má s комплексы могут требовать писать генератор в " не caber" в expresió n порождающая. – abulafia 15.09.2019, 07:51

Люди, благодаря алгоритмам, которые напечатали акцент такой код:

def agrupar(lista, n):
    i = 0
    list = [] #Lista
    while(i < len(lista)):
        list.append(lista[i:i+n])
        i += n
    return tuple(list)

lista = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)

lista_2 = agrupar(lista, 3)
print(lista_2)
0
ответ дан 11.11.2019, 01:07

Что-то простое:

lista_2 = tuple(lista[i:i+3] for i in range(0,len(lista),3))

Изданные

:

В documentaci¦n m¦dulo itertools приходят какие-то средства, между которыми находится funci¦n grouper, который делает agrupaci¦n genérica из элементов:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

, Примененный к первоначальному вопросу, podr¦, - чтобы видеть as¦-:

it = [iter(lista)] * 3
lista_2 = [list(group) for group in zip_longest(*it)]

, Или если он хочет, mÃ: s expl¦-citamente:

it = iter(lista)
lista_2 = [list(group) for group in zip_longest(it, it, it)]

Прием состоит из, что называет zip_longest тремя разами в iterador it, возвращая Ваши первые три элемента, что formarÃ: n terna, и asà - последовательно.

3
ответ дан 11.11.2019, 01:07
  • 1
    Tendrí эксперт, который нужно помещать lista_2 или lista2, а dará ошибка – Adrián Sanz Wallace 14.09.2019, 09:27
  • 2
    Спасибо! Он нуждался в funció n, чтобы упорядочивать imá гены, которые показывает вид app, который я разрабатываю в Джанго. Я обнимаю! – Agughost 15.09.2019, 07:14
  • 3
    @Adriá nSanzWallace Исправленный. – ChemaCortes 15.09.2019, 08:46

Теги

Похожие вопросы