Как по-разному разделить алфавит на списки букв - PullRequest
0 голосов
/ 01 апреля 2020

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

Это мой код:

import string
import random


def generate_list():

    list_of_letters=list(string.ascii_lowercase)
    number_of_letter = len(list_of_letters)
    main_list = []

    while number_of_letter > 0:
        a = random.randint(4, 7)
        number_of_letter -= a
        main_list.append(list_of_letters[0:a])
        del list_of_letters[0:a]

    print(main_list)

generate_list()

Мой наставник сказал мне, что я должен брать и удалять списки букв в одной функции, а не удалять эти фрагменты вручную со списками всех букв вручную, используя del function Так что он хотел бы заменить этот фрагмент кода в одну строку.

main_list.append(list_of_letters[0:a])
del list_of_letters[0:a]

Может кто-нибудь помочь мне? Заранее спасибо:)

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете использовать функцию списков pop(). Он возвращает один элемент списка и удаляет его из списка.

Когда он удаляется с правой стороны, в вашем случае вы должны специально указать, чтобы взять элемент списка по индексу 0, вызвав pop(0).

Поэтому замена двух строк сверху следующим фрагментом должна сделать все за один шаг:

main_list.append([list_of_letters.pop(0) for _ in range(min(len(list_of_letters), a))])

Обратите внимание, что я прекращаю выталкивать элементы из list_of_letters, если a больше, чем остальные предметы в нем, следовательно, min(len(list_of_letters), a).

...