Вход

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 3

И ожидаемый результат

[1, 4, 7, 2, 5, 8, 3, 6, 9]

Я хочу организовать list1 на основе n.

-4
Dhinesh 18 Дек 2015 в 12:51

3 ответа

Лучший ответ
list1 = [1,2,3,4,5,6,7,8,9]
n = 3

m = len(list1)
list2 = [list1[x%(m-1)] for x in range(0, n*(m-1), n)]
list2.append(list1[-1])
print list2

% является оператором по модулю. В основном оператор range выполняет итерацию от 0 до 3 раз больше длины списка. Оператор по модулю обрезает итерацию до нужного числа в пределах длины списка. К сожалению, последняя запись списка не может быть достигнута с помощью этого метода, так как x% (m-1) будет равен нулю. Поэтому последняя запись должна рассматриваться отдельно.

-1
BlackEyedLion 18 Дек 2015 в 10:19

Использовать zip() в этом случае?

>>> [list1[i:i+n] for i in range(0, len(list1), n)]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

>>> list(zip(*[list1[i:i+n] for i in range(0, len(list1), n)]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> 
1
Kevin Guan 18 Дек 2015 в 10:21

Что о:

list1 = [1,2,3,4,5,6,7,8,9]
n = 3
res = []
for i in range(n):
        res += list1[i::n]
print(res)
1
Gerard Rozsavolgyi 18 Дек 2015 в 10:42