我正在pygame中玩一个小游戏,用于强化学习(openAI体育馆),但是遇到列表/字典问题。我认为这与所有指向同一内存地址的空列表有关,但在这种情况下我不理解为什么/如何或如何避免使用它。
最终,我希望能够使用空列表或字典,我试图通过其第二个元素(int3)将形式为((int1,int2),int3))的元组列表进行分组。
我尝试在初始化空数组时使用copy(),但没有区别。我没有从教程或文档页面中找到/理解任何有用的东西,因此,我将非常感谢您对如何避免此问题进行简要说明。
def works(t):
lst = [[1],[2],[3]]
lst[1].append([x for x in t if x[1]==1])
return lst
def does_not_work(t):
lst = 3*[list()]
lst[1].append([x for x in t if x[1]==1])
return lst
t = [(('a'), 0), (('b'), 1), (('c'), 1), (('d'),2)]
print('Expected Result:')
print(works(t))
print('Confusing Result:')
print(does_not_work(t))
Expected Result:
[[1], [2, [('b', 1), ('c', 1)]], [3]]
Confusing Result:
[[[('b', 1), ('c', 1)]], [[('b', 1), ('c', 1)]], [[('b', 1), ('c', 1)]]]
答案 0 :(得分:4)
lst = 3*[list()]
这将创建3个对同一列表的引用。使用lst = [ [] for i in range(n) ]