Есть ли элегантный способ заполнить последний подсписок нулями при создании подсписков из списка целых чисел?
Пока у меня есть этот лайнер, и мне нужно заполнить последний подсписок двумя нулями.
[lst[x:x+3] for x in range(0, len(lst), 3)]
Например
lst =[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
результат должен быть:
[1,2,3][4,5,6][7,8,9][10,0,0]
Можете ли вы привести более четкий пример входов и выходов? например для определенного значения out, что вы хотите, чтобы ваш код производил?
название списка, я исправил вопрос
Я знаю, как заполнить последний подсписок после создания, но мне любопытно, есть ли способ сделать это одновременно при создании подсписков и, если возможно, в однострочном режиме.
я думаю, вы, вероятно, хотите itertools.zip_longest.






С помощью itertools.zip_longest используйте тот же итератор, созданный вне списка, и заполните отсутствующие значения как 0 :
[[*i] for i in itertools.zip_longest(*[iter(lst)] * 3, fillvalue=0)]
Пример:
In [1219]: lst =[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [1220]: [[*i] for i in itertools.zip_longest(*[iter(lst)] * 3, fillvalue=0)]
Out[1220]: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 0, 0]]
большое спасибо, это работает только для python 3 (что меня устраивает), не так ли?
@GrwKřemílek Да. Для Python 2 можно использовать itertools.izip_longest.
Без itertools:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print([lst[x:x+3]+[0]*(x-len(lst)+3) for x in range(0, len(lst), 3)])
Отпечатки:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 0, 0]]
что такое
out?.