gpt4 book ai didi

python改变列表的值

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:05 25 4
gpt4 key购买 nike

我对 Python 还很陌生,所以请耐心等待,这可能很简单。我正在尝试构建图的邻接列表表示。在这个特定的表示中,我决定使用列表的列表,其中每个子列表的第一个值代表尾节点,所有其他值代表头节点。例如,边为 1->2, 2->3, 3->1, 1->3 的图将表示为 [[1,2,3],[ 2,3],[3,1]]

在此边缘列表上运行以下代码,出现了我不明白的问题。

边列表 (Example.txt):

1 2
2 3
3 1
3 4
5 4
6 4
8 6
6 7
7 8

代码:

def adjacency_list(graph):

graph_copy = graph[:]
g_tmp = []
nodes = []
for arc in graph_copy:

choice_flag_1 = arc[0] not in nodes
choice_flag_2 = arc[1] not in nodes
if choice_flag_1:
g_tmp.append(arc)
nodes.append(arc[0])
else:
idx = [item[0] for item in g_tmp].index(arc[0])
g_tmp[idx].append(arc[1])

if choice_flag_2:
g_tmp.append([arc[1]])
nodes.append(arc[1])

return g_tmp


# Read input from file
g = []
with open('Example.txt') as f:
for line in f:
line_split = line.split()
new_line = []
for element in line_split:
new_line.append(int(element))
g.append(new_line)
print('File Read. There are: %i items.' % len(g))
graph = adjacency_list(g)

在运行时,当代码处理 arc 6 7(文件中的倒数第二行)时,以下行(在 else 语句中找到)附加 7 不仅g_tmp 而且graph_copygraph .

idx = [item[0] for item in g_tmp].index(arc[0])
g_tmp[idx].append(arc[1])

发生了什么?

谢谢!

J

附注我正在运行 Python 3.5

P.P.S。我还尝试用 graph_copy = list(graph) 替换 graph_copy = graph[:] 。同样的行为。

最佳答案

问题出在行

   if choice_flag_1:
g_tmp.append(arc)

当您附加 arc 时,您将附加内部列表的浅拷贝。替换为新列表,如下所示

   if choice_flag_1:
g_tmp.append([arc[0],arc[1]])

关于python改变列表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922701/

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