2012-01-24 5 views
1

に変換しました:は空のリストを追加しますが、次のコードではNoneType

all_subsets = [] 
subsets = [[], [2]] 
left_most = 1 
for subset in subsets: 
    print subset 
    all_subsets.append(subset) 
    all_subsets.append(subset.append(left_most)) 
print all_subsets 

私はリターンが[[], [1], [2], [2, 1]]あるべきと仮定し、私は実際に[[1], None, [2, 1], None]のリターンを得ました。すなわち[]Noneに変換されました。

同じ物理アドレスを指しているのは、ループ内のsubsetを2回修正するという問題だと思います。しかし、次のようにリストを変更する前にローカルコピーを作成しても問題を解決することはできません:

all_subsets = [] 
subsets = [[], [2]] 
left_most = 1 
for subset in subsets: 
    print subset 
    subset_orig = list(subset) 
    subset_plus = list(subset).append(left_most) 
    all_subsets.append(subset_orig) 
    all_subsets.append(subset_plus) 
print all_subsets 

ご存じですか?ありがとう!

答えて

5

append()は、リストをその場で変更します。を返し、Noneを返します。あなたが期待するよう

all_subsets = [] 
subsets = [[], [2]] 
left_most = 1 
for subset in subsets: 
    print subset 
    all_subsets.append(subset) 
    all_subsets.append(subset + [left_most]) 
print all_subsets 

これは[[], [1], [2], [2, 1]]を生成します。

は、ここでは、コードを修正する一つの方法です。

5

list.append()はいつも

all_subsets.append(subset.append(left_most)) 

all_subsetsNoneを追加し、Noneを返します。すでに前の行にall_subsetssubsetを追加するので、あなたはおそらく、単に

subset.append(left_most) 

をしたいです。

関連する問題