-=python=- 列表元素的删除问题!

coolgarfield 2002-11-12 12:59:32
大家看这一个字典:

names={'Leira':{'entered':1,'id':['garfield','coolgarfield']},\
'pig':{'entered':0,'id':['zhutou','zhu']}}

这个数据结构比较复杂,它是对应每一个名字有一个字典,存放他的登陆状况,和对应ID!

试想,有一个函数,希望删除对应某个name的对应ID,一般会这么写:

def delID(name,ID):
if ID in names[name]['id']:
del names[name]['id'][ name[name]['id'].index(ID) ] #prob

因为我们知道,删除列表的方式一般都是: del list[index]
于是就会出现上面prob那行的状况!似乎有悖于python优雅简洁的风格!如果结构更复杂的话,那么象这样的代码岂不是恶梦?!
而且,在上面的in判断中,已经查找过一遍元素,在下面的index方法中有查找一遍,显然效率颇有损失!

不知道删除列表中的对应元素,有没有更简洁,效率更高的方式?

(初学python,希望不会贻笑大方~ )
...全文
1078 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
piamyou 2002-11-15
  • 打赏
  • 举报
回复
我觉得还是简化了的好,又清楚又明了。
xdspower 2002-11-14
  • 打赏
  • 举报
回复
通过引用简化上述要求我觉得这样是一个比较好的选择。
coolgarfield 2002-11-13
  • 打赏
  • 举报
回复
我们知道,在C++标准容器类中有vector和list之分,相当于顺序表和链表的差别,优化不同的操作.

而python只有一个list,不知道它是怎么实现的,是使用顺序还是链表?

当我拥有list的一个元素的引用(某种意义上相当于C++中的指针(iterator?),那么在C++链表中就能直接删除它,而不必索引它!),能不能直接删除它,而不必索引?
dmchun 2002-11-12
  • 打赏
  • 举报
回复
可以通过引用简化上述要求。
names={
'Leira':{'entered':1,'id':['garfield','coolgarfield']},
'pig':{'entered':0,'id':['zhutou','zhu']}
}
def delID(NAME,ID):
try:
xx = names[NAME]['id']#get xx
del xx[xx.index(ID)]
except:
print 'operator error!'
delID('pig','zhu')
print names
echou 2002-11-12
  • 打赏
  • 举报
回复
你不觉得你这个字典的定义也太那个了点?

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧