2015-12-18 2 views
-4

ввода являетсяУпорядочить элементы в списке на основе состояния

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

И ожидается выход

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

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

+6

разместить свои попытки .. –

+1

Я единственный, кто не понимает состояние? – Idos

+2

@Idos - Он подсчитывается по трем - 1, 4, 7, затем 2, 5, 8 и т. Д. – TigerhawkT3

ответ

-1
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 

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

+1

поэтому для 'n = 4' это' [1, 5, 1, 5, 1, 5, 1, 5, 9] ' –

1

Использовать 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)] 
>>> 
+0

>>>' n = 4' '[(1, 5, 9)] ' –

+0

@xi_: Так что он должен дать, когда' n = 4'? –

+0

хороший вопрос :) –

1

насчет:

list1 = [1,2,3,4,5,6,7,8,9] 
n = 3 
res = [] 
for i in range(n): 
     res += list1[i::n] 
print(res) 
Смежные вопросы