Форум сайта python.su
День добрый. Стоит задача разбивать список (каждый раз произвольной длинны) на отрезки по N символов в каждом. Изучал материалы и форумы, и мне удалось найти только обратное задаче решение, когда заведомо известна длина списка, и нужно поделить его на равные (или примерно равные части). Код по обратному решению приложил. Тогда как требуется чтобы код, так скажем, “откусывал” по очереди от начала списка куски длиной N символов и упаковал их во вложенные списки, остаток тоже упаковывался бы. Фактически необходимо так написать код, чтобы вместо переменной “chunks_quantity”, которая задает деление списка на определенное количество частей, была заменена просто числом, которое сообщало бы коду какой длинны в символах должны быть отрезаемые куски.
Подскажите, пожалуйста, в какую сторону мне копать, чтобы написать такой код. Благодарю!
def chunkify_approximately(items, chunks_quantity):
chunk_len = len(items) / chunks_quantity
rest_count = len(items) % chunks_quantity
chunks =
for i in range(chunks_quantity):
chunk = items
items = items
if rest_count and items:
chunk.append(items.pop(0))
rest_count -= 1
chunks.append(chunk)
return chunks
Получаем:
>>> chunkify_approximately(range(2), 3)
[, , ]
>>> chunkify_approximately(range(8), 3)
[, , ]
>>> chunkify_approximately(range(12), 5)
[, , , , ]
Офлайн
a = [ 'День', 'добрый.', 'Стоит', 'задача', 'разбивать', 'список', '(каждый', 'раз', 'произвольной', 'длинны)', 'на', 'отрезки', 'по', 'N', 'символов', 'в', 'каждом', 'Подскажите,', 'пожалуйста,', 'в', 'какую', 'сторону', 'мне', 'копать,', 'чтобы', 'написать', 'такой', 'код.', 'Благодарю!' ] step =int(input()) # 5 for i in range(0,len(a),step): print(a[i:i+step])
['День', 'добрый.', 'Стоит', 'задача', 'разбивать'] ['список', '(каждый', 'раз', 'произвольной', 'длинны)'] ['на', 'отрезки', 'по', 'N', 'символов'] ['в', 'каждом', 'Подскажите,', 'пожалуйста,', 'в'] ['какую', 'сторону', 'мне', 'копать,', 'чтобы'] ['написать', 'такой', 'код.', 'Благодарю!']
Офлайн
marvellikБлагодарю! Об использовании input и range и не подумал вовсе. Жму руку!
Офлайн
>>> s = range(100) >>> shag = 11 >>> [ s[:x] for x in [shag] * (len(s) // shag + (1 if len(s)%shag else 0)) ] [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
Офлайн