如何检查python中是否存在列表?
我有一张networkx图。 我通过添加边来添加节点如何检查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
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)