Найти - Пользователи
Полная версия: замена столбцов в двумерном списке
Начало » Python для новичков » замена столбцов в двумерном списке
1
zlosnij_dani
Есть двумерный список 9 на 9. Необходимо поменять два столбца местами. Попробовал так:
 
temp1 = obj.genmap[0:8][randj]
obj.genmap[0:8][randj] = obj.genmap[0:8][randj1]
obj.genmap[0:8][randj1] = temp1[0:8]

Но меняются местами строки, а не столбцы! В чем секрет?
beelze
вот например один из наглядных и традиционных способов
a = [[0,1,2], [3,4,5], [6,7,8]]
cols = (0, 2)
for row in a: print row
#[0, 1, 2]
#[3, 4, 5]
#[6, 7, 8]
swap = [ row[cols[0]] for row in a ]
for row in a: row[cols[0]] = row[cols[1]]
for i, row in enumerate(a): row[cols[1]] = swap[i]
for row in a: print row
#[2, 1, 0]
#[5, 4, 3]
#[8, 7, 6]
FishHook
>>> a = [[0,1,2], [3,4,5], [6,7,8]]
>>> a=[ [x[1], x[0] ,x[2]] for x in a]
>>> print a
[[1, 0, 2], [4, 3, 5], [7, 6, 8]]
FishHook
>>> def swap(index1, index2, iterable):
	for x in iterable:
		x[index1],x[index2]=x[index2],x[index1]
		
>>> a
[[1, 0, 2], [4, 3, 5], [7, 6, 8]]
>>> swap(2, 0 ,a)
>>> a
[[2, 0, 1], [5, 3, 4], [8, 6, 7]]
>>> 
pyuser
Еще можно так извратиться:
def swap(iterable, index1, index2):
    tmp = list(zip(*iterable))
    tmp[index1], tmp[index2] = tmp[index2], tmp[index1]
    return list(zip(*tmp))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB