2013-10-05 3 views
-6

У меня есть следующий списокPython сортировки списка по алгоритму

[ 
    '<td>1</td>', '<td>2</td>', '<td>3</td>', '<td>4</td>', 
    '<td>A</td>', '<td>B</td>', '<td>C</td>', '<td>D</td>', 
    '<td>I</td>', '<td>II</td>', '<td>III</td>', '<td>IV</td>', 
] 

Каков алгоритм для сортировки это соответствует:

[ 
    '<td>1</td>', '<td>A</td>', '<td>I</td>, 
    '<td>2</td>', '<td>B</td>', '<td>II</td>, 
    '<td>3</td>', '<td>C</td>', '<td>III</td>, 
    '<td>4</td>', '<td>D</td>', '<td>IV</td>, 
] 

Я не знаю, как описать изменения в программировании сленга , кроме того, что отступы теперь должны следовать вертикально, а не горизонтально. Я знаю только длину последовательности исходного списка (в этом случае 4)

Это не домашнее задание, я просто расколол свой мозг ns, выясняя это на оболочке, любая помощь будет оценена!

+0

Написать пользовательскую функцию сортировки –

+1

И ваша проблема появляется более как проблема группирования, чем задачи сортировки –

+0

Разделить элементы различных видов, сортировать их (в вашем примере не нужно), а затем «застегните» их вместе. – Bakuriu

ответ

3
Data = [ 
    '<td>1</td>', '<td>2</td>', '<td>3</td>', '<td>4</td>', 
    '<td>A</td>', '<td>B</td>', '<td>C</td>', '<td>D</td>', 
    '<td>I</td>', '<td>II</td>', '<td>III</td>', '<td>IV</td>', 
] 

lists, result = [], [] 
for i in range(0, len(Data), 4): 
    lists.append(Data[i:i+4]) 

for currentList in zip(*lists): 
    result += list(currentList) 
print result 

Выход

['<td>1</td>', '<td>A</td>', '<td>I</td>', 
'<td>2</td>', '<td>B</td>', '<td>II</td>', 
'<td>3</td>', '<td>C</td>', '<td>III</td>', 
'<td>4</td>', '<td>D</td>', '<td>IV</td>'] 
3

Это не вид, это транспонирование.

Элементы массива нумеруются [0, 1, 2, 3, 4, ..] и вы хотите переместить их на [0, 4, 8, 1, 5, 9, 2, ..], т.е.

newpos(x) = oldpos(x)/4 + 4*(oldpos(x) % 4) 

где первая половина новый номер столбца и вторая половина является новой строки число.

Смежные вопросы