Форум сайта python.su
Подскажите пожалуйста, как разбить список по такому алгоритму:
есть:
[1,2,3,…,n,
1,2,3,…,n,
1,2,3,…,n,
…,
m]
надо:
[,,,…,n]
PS: пока додумался как сделать:
[,,,…,m]
zip(**n)
Отредактировано (Окт. 8, 2011 16:10:37)
Офлайн
Не совсем понятно что вы хотите. Можно пример?
Может так: zip(*zip(**n)) ?
Офлайн
Пример возможной реализации
# -*- encoding: cp1251 -*-
if __name__ == '__main__':
n = 5 # Столбцы
m = 3 # Строки
inlist = range(1, n + 1) * m # Генерируем входной список (для примера)
result = [[i for j in inlist if i == j] for i in list(set(inlist))]
print 'Входной список:', inlist
print 'Результат:', result
Входной список: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
Результат: [[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5]]
Офлайн
Или так еще: [lst for i in range(n)]
Офлайн
Ребят, спасибо! "zip(*zip(**n))" самое оно )
Офлайн
На самом деле если список большой, то может быть существенная разница в производительности между вариантами. В варианте *n есть большая избыточность, которая обязательно проявится при больших n или m. Я, собственно, поэтому второй вариант запостил. Он должен по идее работать быстрее.
Офлайн