如何逐步消除python列表中的项目?
我正在使用“for 循环”逐步消除项目并生成包含不同组合的新列表(feature_combination)。
feature_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
feature_combination = []
for i in range(7):
feature_list.pop()
feature_combination.append(feature_list)
feature_combination
理想的输出应该是:
[['A', 'B', 'C', 'D', 'E', 'F'],['A', 'B', 'C', 'D', 'E'],['A', 'B', 'C', 'D'],['A', 'B', 'C'],['A', 'B'],['A'], []]
但目前的输出是:
[[], [], [], [], [], [], []]
当我逐步打印进度时:
feature_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
feature_combination = []
for i in range(7):
feature_list.pop()
print(feature_list)
我可以得到以下结果:
['A', 'B', 'C', 'D', 'E', 'F']
['A', 'B', 'C', 'D', 'E']
['A', 'B', 'C', 'D']
['A', 'B', 'C']
['A', 'B']
['A']
[]
那么,为什么我不能将这些结果附加到空列表中?问题是什么?
回答
这是因为当你打电话feature_combination.append(feature_list),你追加引用到feature_list,没有实际价值feature_list。由于feature_list在 for 循环结束时为空,因此对它的所有引用也是空的。
您可以通过更改feature_combination.append(feature_list)为来修复它feature_combination.append(feature_list.copy()),这会生成要存储的列表副本。