如何检查列表是否在Python中存在?
我有一个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]]:
结果是有效的。
5 个回答
1
是的,这样可以清空现有的列表。你可以试试
G.node[route[i]].setdefault('position', []).append(...)
每当你想要添加新元素的时候。
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]
5
这段代码 G.node[route[i]]['position'] = list()
会让 G.node[route[i]]['position']
这个位置变成一个空列表,但它不会影响之前那个列表,因为其他地方可能还在用那个列表。
如果你想把列表清空,可以用 del l[:]
这个方法。
如果你希望每次新建一个列表的时候都能自动生成,可以使用 collections.defaultdict
,这样新创建的条目默认就是一个列表。