Обратный мод Python - PullRequest
       47

Обратный мод Python

0 голосов
/ 23 октября 2018

Я использую Python3.Я хочу получить 4 элемента из mylist, чтобы заполнить список 2 и печатать мой список 2 каждые 4 цикла.И мне нужно распечатать остальные, даже если в конце есть только 1, 2 или 3 элемента.

Я хочу сделать это с модом %:

mylist = [1, 2, 3, 4, 5]
list2 = []
for count, el in enumerate(mylist):
    list2.append(el)
    if count % 4 == 0:
        print(list2)
        list2 = []

Вывод:

[1]
[2, 3, 4, 5]

Но мне нужно обратное.

Я пытался начать с 1 enumerate(mylist, 1):, но вывод [1, 2, 3, 4], последний игнорируется.

Выходмне нужно:

[1, 2, 3, 4]
[5]

Длина mylist абсолютно случайна.Как я могу сделать, чтобы получить вывод, который я хочу?

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Похоже, вы просто хотите разделить данные на группы по четыре. Это лучше всего сделать здесь:

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

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

for i in chunks(mylist,4):
    print(i)
0 голосов
/ 23 октября 2018

У вас две проблемы.Одним из них является начало в 0, как вы заметили.Во-вторых, вы печатаете только в том случае, если в списке ровно 4 элемента, поэтому, если в конце что-то осталось, то после цикла, который печатает эти оставшиеся значения, больше нет вызова print.Добавьте это в конце:

mylist = [1, 2, 3, 4, 5]
list2 = []
for count, el in enumerate(mylist, 1):
    list2.append(el)
    if count % 4 == 0:
        print(list2)
        list2 = []

if list2: print(list2)
0 голосов
/ 23 октября 2018

@ remcogerlich написал хороший ответ для что вы просите.Хотя я бы порекомендовал не использовать % 4 для того, чего вы достигаете (до тех пор, пока не сделаете какую-то домашнюю работу из школы), и вместо этого использовать нарезку списка:

n = 4
for i in range(0, len(mylist), n):
    print(mylist[i:i + n])

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

0 голосов
/ 23 октября 2018

count начинается с 0 и 0%4==0.

Так что просто используйте перечисление, как вы делали, а затем в конце

if len(list2) != 0
    print(list2)
...