附加一个空列表但转换为NoneType

clw*_*wen 1 python list

在以下代码中:

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
Run Code Online (Sandbox Code Playgroud)

我想应该回归[[], [1], [2], [2, 1]],但实际上我得到了回报[[1], None, [2, 1], None].即,[]已被转换为None.

我想这是subset在循环中修改两次的问题,它指向相同的物理地址.但是,即使我在修改列表之前制作本地副本,也无法解决问题,例如:

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
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢!

Sve*_*ach 5

list.append()总是回来None,所以

all_subsets.append(subset.append(left_most))
Run Code Online (Sandbox Code Playgroud)

附加Noneall_subsets.你可能只是想要

subset.append(left_most)
Run Code Online (Sandbox Code Playgroud)

既然你已经追加subsetall_subsets中前行.


NPE*_*NPE 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
Run Code Online (Sandbox Code Playgroud)

这会产生[[], [1], [2], [2, 1]]你所期望的.