我有一个networkx图表。 我通过添加边
添加节点G.add_edge(route[i-1],route[i]);
现在一旦通过直接添加边创建节点, 我添加一个名为
的列表G.node[route[i]]['position'] = list()
当我一次又一次地获得相同的节点时,我会向它添加位置
G.node[route[i]]['position'].append( i - 3 )
现在,当我想附加时,如何检查列表是否存在? 做了
G.node[route[i]]['position'] = list()
清除已有元素的列表?
编辑-----我之前的问题令人困惑
我想继续添加到列表中
但除非列表存在,否则我无法追加,对吧?
所以我必须这样做
我的循环中G.node[route[i]]['position'] = list()
所以下次当我想在另一个循环实例中添加到同一个列表时,我怎么知道G.node[route[i]]['position']
存在一个列表,我不必再创建它。
编辑----- 我认为我的清单本身就是关键 所以我做了
if not 'position' in G.node[route[i]]:
并且有效
答案 0 :(得分:5)
G.node[route[i]]['position'] = list()
将使插槽G.node[route[i]]['position']
保留一个空列表,但它不会影响它先前保存的列表,其他对象可能会引用该列表。
相反,请使用:del l[:]
清空列表。
如果您想自动创建列表,请使用collections.defaultdict
将新创建的条目默认为列表。
答案 1 :(得分:1)
是的,这会清除现有列表。你可以试试
G.node[route[i]].setdefault('position', []).append(...)
每当你想要追加元素时。
答案 2 :(得分:1)
不确定这是不是你的意思,但是分配list()应该确保有一个要附加的列表。如果已有列表,则分配会创建一个新列表(请参阅Marcin的答案)。测试:
>>> a = list()
>>> for i in range(10):
... a.append(i)
...
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = a
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = list()
>>> a
[]
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 3 :(得分:0)
使用isinstance()
并执行以下操作:
if not ininstance(G.node[route[i]]['position'], list):
G.node[route[i]]['position'] = list()
G.node[route[i]]['position'].append(i - 3)
或使用type
之类的:
if not type(G.node[route[i]]['position']) is list
我必须说这种检查是相当不合理的,通常你应该知道G.node[route[i]]['position']
在成为一个列表并检查之前是什么。
例如,如果它是None
你可以做(假设关键'位置'存在,否则只需调用get('position')
):
if G.node[route[i]]['position'] is None:
G.node[route[i]]['position'] = list()
G.node[route[i]]['position'].append(i - 3)
.. = list()
是否清除已存在的元素列表?答案是否。
list()
将实例化一个新的空列表。
您可能想看一下这个问题:How to empty a list in Python? 简而言之:
G.node[route[i]]['position'][:] = []
将清除您的清单。
答案 4 :(得分:0)
只需使用get:
if G.node[route[i]].get('position') is None:
G.node[route[i]]['position'] = list()
else:
G.node[route[i]]['position'].append(stuff)