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

时间:2012-01-18 09:36:52

标签: python list

我有一个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 个答案:

答案 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)

1)如何检查列表是否存在?

使用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)

2)执行.. = 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)