list - 从字典中的列表中删除元素
问题描述
这:
deck = {1:[1,2,3,4], 2:[1,2,3,4], 3:[1,2,3,4]}
print(deck)
del deck[1][2]
print(deck)
给出了这个:
{1: [1, 2, 3, 4], 2: [1, 2, 3, 4], 3: [1, 2, 3, 4]}
{1: [1, 2, 4], 2: [1, 2, 3, 4], 3: [1, 2, 3, 4]}
这是我所期望的,但这是:
deck = {1:None, 2:None, 3:None}
suit =[1,2,3,4]
for i in range(len(deck)):
deck[i+1] = suit
print(deck)
del deck[1][2]
print(deck)
给出了这个:
{1: [1, 2, 3, 4], 2: [1, 2, 3, 4], 3: [1, 2, 3, 4]}
{1: [1, 2, 4], 2: [1, 2, 4], 3: [1, 2, 4]}
如您所见,del 关键字删除了每个键值的索引 2,而不仅仅是键值 1。抱歉,如果这很明显,我正在学习并对此感到困惑。
解决方案
dict 中的每个元素都有对同一个列表的引用。因此,当您从其中一个元素中删除一个元素时,它对所有元素都是可见的(因为如前所述,它们实际上是同一个列表!)。
相反,字典的每个元素都应该有一个不同的列表副本:
for i in range(len(deck)):
deck[i+1] = suit[:]
旁注:
这个循环可以用更“pythonic”的dict-comprehension替换:
deck = {i:suit[:] for i in range(1,4)}
推荐阅读
- typescript - 打字稿根据参数返回不同的接口
- javascript - Javascript DOM | 通过内部文本查找元素并替换每个匹配的元素
- list - Kotlin 中的更新列表
- java - 将函数应用于所有列表元素
- c# - 如何通过 wpf 中的代码添加现有项目
- c++ - 如何根据来自另一个向量的信息将向量中的元素添加在一起
- python - 当 Windows 注销/休眠时,带有 Anaconda 的 Pycharm 是否运行脚本?
- botframework - Microsoft Bot Famework - 网络聊天 - 事件
- python - 初学者 OOP 问题....为什么在其他函数中使用“自我”(不仅仅是 __init___)
- reactjs - Reactjs:TypeError:无法在“窗口”上执行“获取”:名称无效