gpt4 book ai didi

python - 在 Python 中使用字典构建自己的图

转载 作者:行者123 更新时间:2023-12-01 01:29:21 24 4
gpt4 key购买 nike

我尝试用 python 构建自己的图。字典非常适​​合这个,但我认为使用它们太愚蠢了。

def add_edge(gra, edge):

edge = set(edge)
vertex1 = edge.pop()
if edge:

vertex2 = edge.pop()
else:

vertex2 = vertex1
if vertex1 in gra:
gra[vertex1].append(vertex2)
else:
gra[vertex1] = [vertex2]

我尝试向图表添加一些边。当我使用这个时:

z = {0:[],1:[],2:[],3:[],4:[],5:[]}

for i in range(0,6):
add_edge(z,(i,50))
print(z)

我希望它会添加:

{0:[50],1:[50],2:[50],3:[50],4:[50],5:[50]}

但我得到:

{0: [50], 1: [50], 2: [50], 3: [], 4: [], 5: [], 50: [3, 4, 5]}

我的想法有什么问题吗?

最佳答案

对于“较旧”的 Python 实现,set 是一种无序数据结构(从 开始,它使用插入顺序)。

这意味着,如果您将一个元素添加到集合中,通过 .pop() 您可以按任何顺序检索元素。因此,您在这里插入例如 (1, 50),但将其检索为 501

但无论如何你都不需要一个集合,你可以“解压”你的元组:

def add_edge(gra, edge):
<b>vertex1, vertex2 = edge</b>
if vertex1 in gra:
gra[vertex1].append(vertex2)
else:
gra[vertex1] = [vertex2]

或者如果您的元组可以包含更多元素,我们可以在此处使用例如 islice(..) :

from itertools import islice

def add_edge(gra, edge):
<b>vertex1, vertex2 = islice(edge, 2)</b>
if vertex1 in gra:
gra[vertex1].append(vertex2)
else:
gra[vertex1] = [vertex2]

通过迭代,我们还可以获取各种集合(本身不可下标)。

关于python - 在 Python 中使用字典构建自己的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041545/

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