使用字典在 Python 中构建自己的图表
Building own Graph in Python with Dictionary
我试图在 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]}
我的想法有什么问题吗?
对于 "older" Python 实现,set
是无序数据结构(从 python-3.7 开始它使用插入顺序)。
这意味着如果您向集合中添加一个元素,通过 .pop()
您可以按任何顺序检索元素。因此,您在这里插入 (1, 50)
,但您将其检索为 50
和 1
。
但是你不需要集合,你可以 "unpack" 你的元组:
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 中构建自己的图表。字典非常适合这个,但我认为我使用它们太愚蠢了。
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]}
我的想法有什么问题吗?
对于 "older" Python 实现,set
是无序数据结构(从 python-3.7 开始它使用插入顺序)。
这意味着如果您向集合中添加一个元素,通过 .pop()
您可以按任何顺序检索元素。因此,您在这里插入 (1, 50)
,但您将其检索为 50
和 1
。
但是你不需要集合,你可以 "unpack" 你的元组:
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]
通过迭代,我们还可以获取各种集合(它们本身不可订阅)。