我有一个递归函数,它从一组边生成一个路径列表。但是,有时由于图形的性质,它进入循环并生成包含列表中无限循环符号[…]的字典,例如:
{('a', 'b'): [[1, 2, 8, 9, 18, 6, 5], [...], [1, 2, 7, 5], [1, 4, 3, 10, 9, 18, 6, 5]]}
当然,当我的程序在这个输出字典上循环并遇到“[…]”时,会产生以下错误
a = {('a', 'b'): [[1, 2, 8, 9, 18, 6, 5], [...], [1, 2, 7, 5], [1, 4, 3, 10, 9, 18, 6, 5]]}
^
SyntaxError: invalid syntax
因为我不知道该怎么称呼“[…]”。我在Google上的搜索没有得到任何有用的结果。你知道吗
我想知道有没有办法从列表中删除[…],例如从上一个示例生成以下词典:
{('a', 'b'): [[1, 2, 8, 9, 18, 6, 5], [1, 2, 7, 5], [1, 4, 3, 10, 9, 18, 6, 5]]}
如有任何反馈,我将不胜感激。你知道吗
这并不是你所想的,
[...]
意味着相同的列表被添加到原始列表中,如下所示:所以问题是你创建了你的列表,你应该修正你的逻辑。我是说那样做更好。但试试这个,可能会有帮助:
如果找到循环元素,可以用循环元素替换
.remove(your_dict[('a','b')])
。你知道吗Python没有像commonlisp的“print circle”这样的选项,它允许循环数据结构的序列化和反序列化;如果需要的话,还有pickle模块。你知道吗
如果只需要自定义序列化而不需要反序列化来重建完整的数据结构,则可以保留一组已找到的成员:
在上面的代码中,我将输出
[-1]
,在那里会出现一个back引用。你知道吗如果您还希望能够在自定义序列化中重建原始结构(包括循环),那么代码要稍微复杂一些。基本上是你
known
字典映射列表中删除元素到引用号在反序列化过程中,您需要构建相同的引用号映射,当满足引用时,您只需从映射中选择列表(如果您找到已经满足的引用号,则可以保证列表已经满足)。唯一需要注意的是,无论是序列化还是反序列化,都需要在递归之前将列表放到映射中。你知道吗
相关问题 更多 >
编程相关推荐