gpt4 book ai didi

python - python中迭代下的字典问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:21 24 4
gpt4 key购买 nike

基本上,这个程序将根据seqs找到每个节点的所有邻居。 Seqs表示每个节点的方向性。例如,[1, 2] 表示 1 指向 2。我使用字典将节点存储为键,将其邻居存储为值。

seqs = [[1,2],[1,3],[2,3]]
nodes = {}
neighbors = set()
for i in range(len(seqs)):
for j in range(len(seqs[i]) - 1, 0, -1):
neighbors.add(seqs[i][j - 1])
nodes[seqs[i][j]] = neighbors
print(nodes)

节点的结果应该是{2: {1}, 3: {1, 2}},但结果是{2: {1, 2}, 3:{1, 2}}。在最后一次迭代中,只应更新 3 的值,但两个值都会更新。我对此感到困惑。

最佳答案

这是一个有趣的问题,当我第一次读到它时,我并没有意识到这一点。你的逻辑是对的,但是唉!您已在循环外部定义了 neighbors,并将名称 neighbors 分配给该集合,然后设置 nodes[2] = Neighbors。这里需要注意的一点是,这里的 neighbors 只是集合的名称,nodes[2] 得到的是相同的集合。因此,在后续迭代中,当您修改 nodes[3]neighbors 时,集合 (neighbors) 的值会发生更改,因此执行节点[2]。您需要的是 copy(),以便将集合的副本传递给 nodes[2] 而不是实际的集合:

nodes = {}
neighbors = set()
for i in range(len(seqs)):
for j in range(len(seqs[i]) - 1, 0, -1):
neighbors.add(seqs[i][j - 1])
nodes[seqs[i][j]] = neighbors.copy()
print(nodes)

输出:

{2: {1}}
{2: {1}, 3: {1}}
{2: {1}, 3: {1, 2}}

关于python - python中迭代下的字典问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58143525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com