Использование вложенных списков, как это:своп столбцов в вложенного списка (Python 3)
N = [['D','C','A','B'],
[2,3,4,5],
[6,7,8,9]]
Как я могу поменять две колонки? для столбца экземпляра C и столбца A.
Использование вложенных списков, как это:своп столбцов в вложенного списка (Python 3)
N = [['D','C','A','B'],
[2,3,4,5],
[6,7,8,9]]
Как я могу поменять две колонки? для столбца экземпляра C и столбца A.
С для цикла и немного помощи от this поста:
Код:
N = [["D","C","A","B"],
[2,3,4,5],
[6,7,8,9]]
# Swap the last two columns
for item in N:
item[2], item[3] = item[3], item[2]
# Or as a function
def swap_columns(your_list, pos1, pos2):
for item in your_list:
item[pos1], item[pos2] = item[pos2], item[pos1]
Выход:
swap_columns(N, 2, 3)
[['D', 'C', 'B', 'A'], [2, 3, 5, 4], [6, 7, 9, 8]]
Другая возможность, используя zip
:
In [66]: N = [['D', 'C', 'A', 'B'], [2, 3, 4, 5], [6, 7, 8, 9]]
Транспонирование с помощью zip
:
In [67]: M = list(zip(*N))
поменять местами строки 1 и 2:
In [68]: M[1], M[2] = M[2], M[1]
Транспонирование снова:
In [69]: N2 = list(zip(*M))
In [70]: N2
Out[70]: [('D', 'A', 'C', 'B'), (2, 4, 3, 5), (6, 8, 7, 9)]
В результате список кортежей. Если вам нужен список списков:
In [71]: [list(t) for t in zip(*M)]
Out[71]: [['D', 'A', 'C', 'B'], [2, 4, 3, 5], [6, 8, 7, 9]]
Это не делает обмен на месте. Для этого см. Ответ @ DaveTucker.
'zip' не возвращает список в Python3 –
@gnibbler: Спасибо, забыл об этом. Исправлена. –
>>> N = [['D','C','A','B'],
... [2,3,4,5],
... [6,7,8,9]]
>>>
>>> lineorder = 0,2,1,3
>>>
>>> [[r[x] for x in lineorder] for r in N]
[['D', 'A', 'C', 'B'], [2, 4, 3, 5], [6, 8, 7, 9]]
Если вы не хотите, чтобы порядок зашиты, вы можете создать его легко, как этот
>>> lineorder = [N[0].index(x) for x in ['D','A','C','B']]
Чтобы создать копию N с двумя колонками обмениваемых, S, в одной строке, вы можете сделайте следующее:
>>> N = [['D','C','A','B'],[2,3,4,5],[6,7,8,9]]
>>> S = [[n[0],n[2],n[1],n[3]] for n in N]
>>> S
[['D', 'A', 'C', 'B'], [2, 4, 3, 5], [6, 8, 7, 9]]
Предполагается, что каждый вложенный список N равен по размеру.
Обратите внимание, что это делает обмен на месте ... что может быть именно то, что требуется! –