2016-07-08 1 views
4

Я пытаюсь переместить второе значение в списке на третье значение в списке для каждого вложенного списка. Я попробовал ниже, но он работает не так, как ожидалось.Python List Column Move

Код

List = [['a','b','c','d'],['a','b','c','d'],['a','b','c','d']] 
print(List) 
col_out = [List.pop(1) for col in List] 
col_in = [List.insert(2,List) for col in col_out] 
print(List) 

Результат

[['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']] 
[['a', 'b', 'c', 'd'], [...], [...]] 

Желаемая Result

[['a', 'c', 'b', 'd'], ['a', 'c', 'b', 'd'], ['a', 'c', 'b', 'd']] 

ОБНОВЛЕНИЕ

Основываясь на комментарии pynoobs, я придумал следующее. Но я все еще не там. Почему «c» печатает?

Код

List = [['a','b','c','d'],['a','b','c','d'],['a','b','c','d']] 
col_out = [col.pop(1) for col in List for i in col] 
print(col_out) 

Результат

['b', 'c', 'b', 'c', 'b', 'c'] 
+1

в его нынешнем виде, поп это отрывая весь список. Не значение внутри списка. – PyNoob

ответ

2
[List.insert(2,List) for col in col_out] 
       ^^^^ -- See below. 

Вы вставляете весь список в качестве элемента в том же списке. Подумайте, рекурсия!


Также, пожалуйста, воздержитесь от использования выражений, изменяющих состояние, в понимании списка. Понимание списка должно NOT изменить любые переменные. Это плохие манеры!

В вашем случае, вы могли бы сделать:

lists = [['a','b','c','d'],['a','b','c','d'],['a','b','c','d']] 
for lst in lists: 
    lst[1], lst[2] = lst[2], lst[1] 
print(lists) 

Выход:

[['a', 'c', 'b', 'd'], ['a', 'c', 'b', 'd'], ['a', 'c', 'b', 'd']] 
+0

делает изменение варов в понимании списка причиной воздействия производительности? Почему цикл for работает лучше? –

+0

Нет, дело не в производительности. Речь идет не о неправильном использовании того, что он предлагает. Часть, которая идет перед маркером 'for', является чисто * преобразованием * или * map * только текущим объектом, который повторяется и создает и возвращает новый объект. – SuperSaiyan

+0

Я вижу, отметил и благодарю вас за помощь! –

0

Вы можете сделать это, как этот

myList = [['a','b','c','d'],['a','b','c','d'],['a','b','c','d']] 
myOrder = [0,2,1,3] 
myList = [[sublist[i] for i in myOrder] for sublist in myList] 
+0

Это действительный ответ. Не знаю, почему это было приостановлено. +1 – SuperSaiyan

+0

Я подарил вам взнос :) –