@darke3v

Проблема с List comprehension

Задумка такова, нужно через каждые три символа из к переменной secretkey дописывалось число из id.
Получилось так:
secretkey='abcdef'
id='12'
test=[secretkey[i:i + 3]+l for i in range(0, len(secretkey), 3) for l in id]
['abc1', 'abc2', 'def1', 'def2']

Как избавиться от второго цикла дабы избежать дубляжа?
  • Вопрос задан
  • 2646 просмотров
Решения вопроса 1
iley
@iley
Можно решить, например, так:
from itertools import cycle
test = [secretkey[i:i + 3]+l for i, l in zip(range(0, len(secretkey), 3), cycle(id))]

Но, на мой взгляд, код будет более читаемым если добавить вспомогательную функцию, разбивающую строку (или любую другую последовательность) на равные части:
from itertools import cycle

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

test = [ chunk + number
         for chunk, number in zip(chunks(secretkey, 3), cycle(id)) ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы