追加一个空列表却变成了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
,而它们指向的是同一个内存地址。不过,即使我在修改列表之前先做一个本地副本,我也无法解决这个问题,比如下面这样:
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
有什么想法吗?谢谢!
2 个回答
5
list.append()
这个方法总是返回 None
,所以
all_subsets.append(subset.append(left_most))
会把 None
加到 all_subsets
里。你可能只是想要
subset.append(left_most)
因为你在前面的那行代码里已经把 subset
加到 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]]
。