2016-07-08 5 views
4

リスト内の2番目の値を、各入れ子リストのリストの3番目の値に移動しようとしています。私は以下を試しましたが、期待どおりに動作していません。Pythonリスト列移動

コード

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'], [...], [...]] 

望ましい結果

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

UPDATE

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'トークンの前に来る部分は、反復処理されている現在のオブジェクトのみを変換*する*または*マップして新しいオブジェクトを作成して返します。 – 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

私はあなたにupvoteを与えた:) –

関連する問題