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

如何检查python中是否存在列表?,python,list,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

我有一张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']
的列表存在,并且我不必再次创建它

编辑----- 我认为我的清单本身就是这里的关键 所以我做了


而且它可以工作

G.node[route[i]['position']=list()
将使插槽
G.node[route[i]['position']
保留一个空列表,但它不会影响它以前保存的列表,其他对象可能会引用该列表

相反,使用:
dell[:]
清空列表


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

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

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

每当您想要附加元素时

不确定这是否是您的意思,但是分配list()应该确保有一个要附加到的列表。如果已经有一个列表,那么作业会创建一个新的列表(参见Marcin的答案)。测试:

1) 如何检查列表是否存在? 使用并执行以下操作:

if not ininstance(G.node[route[i]]['position'], list):
    G.node[route[i]]['position'] = list()
G.node[route[i]]['position'].append(i - 3)
或使用
类型
如:

if not type(G.node[route[i]]['position']) is list
我必须说,这种检查非常不符合pythonic,通常在成为列表之前,您应该知道G.node[route[I]][position']是什么,然后进行检查

例如,如果它是
None
,您可以执行以下操作(假设键“position”存在,否则只需调用
get(“position”)

2) 做
。=list()
是否清除已存在元素的列表? 答案是否定的

list()
将实例化一个新的空列表

您可能想看看这个问题:。
简言之:

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)

我的python已经生锈了,但我想在G.node[route[I]中执行“position”来查找密钥。(假设在创建列表()之前该位置不存在)如果不是G.node[traceroute[i]]['position'],我会得到一个无效的syntax,我想您可能误解了。我不是说要做一个
,如果不是的话。“in”是Python中的一个运算符。看这个帖子:分配一个新的列表和清除一个现有的列表是不同的。你有一个观点。将新列表指定为该字典中的值时,现有列表不会被清除。我把注意力集中在OP问题的另一个方面,即检查G.node[route[I]][position']
是否已经存在。为什么要这样放置-1?如果我误解了什么,就告诉我。我不知道是谁给了-1。但我认为你误解了我的问题。问题是G.node[route[i]]在第一次迭代时没有“position”作为键,您建议的所有操作都将失败,并出现“KeyError”。@Bogdan:我只是假设他/她在循环之前初始化了该值,所以我没有想到使用
get
(就像您那样)。我现在就说清楚,谢谢你的评论!
if G.node[route[i]]['position'] is None:
    G.node[route[i]]['position'] = list()
G.node[route[i]]['position'].append(i - 3)
G.node[route[i]]['position'][:] = []
    if G.node[route[i]].get('position') is None:
        G.node[route[i]]['position'] = list()
    else:
        G.node[route[i]]['position'].append(stuff)