繁体   English   中英

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

[英]How to check if a list exists in 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'] = list()所以下一次当我想在另一个循环实例中添加到同一列表时,我怎么知道一个列表G.node[route[i]]['position'] ,我不必再次创建它。

编辑-----我认为列表本身是关键,所以我做了

                    if not 'position' in G.node[route[i]]:

它的工作原理

G.node[route[i]]['position'] = list()将使插槽G.node[route[i]]['position']保留一个空列表,但不会影响该列表之前持有的对象,可能还有其他对象可以参考。

而是使用: del l[:]清空列表。

如果要自动创建列表,请使用collections.defaultdict将新创建的条目默认为列表。

是的,这将清除现有列表。 你可以试试

G.node[route[i]].setdefault('position', []).append(...)

每当您要追加元素时。

不确定这是否是您的意思,但是分配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]

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

我必须说这种检查是非Python的,通常在成为列表并进行检查之前,您应该知道G.node[route[i]]['position']是什么。

例如,如果它为None ,那么您可以做(假设键'position'存在,否则只需调用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()将实例化一个新的空列表。

您可能想看一下这样的问题: 如何在Python中清空列表?
简而言之:

G.node[route[i]]['position'][:] = []

将清除您的列表。

只需使用get:

    if G.node[route[i]].get('position') is None:
        G.node[route[i]]['position'] = list()
    else:
        G.node[route[i]]['position'].append(stuff)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM