如何检查列表是否在Python中存在?

2 投票
5 回答
4279 浏览
提问于 2025-04-17 10:30

我有一个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,这样新创建的条目默认就是一个列表。

撰写回答