Python论坛  - 讨论区

标题:[python-chinese] 一个关于list的remove函数的问题

2005年12月06日 星期二 19:28

Li Weigang dimens at gmail.com
Tue Dec 6 19:28:06 HKT 2005

各位好,

一个list,如果要去除所有包含有特定值的元素。为什么下面的代码出现问题?请给解释一下,另外,如果要完成这个功能请给出一个最常用的方法,谢谢。如果是用pop,会提示出现list越界的错误。必须要用一个新的list么?谢谢。

ll = [2,2,2,3,4,5,2,6,9,9,5,5,5,5,5]
for x in ll:
 print x
 if x == 2:
  ll.remove(x)
  print ll

输出结果是:


 ----------python ----------
2
[2, 2, 3, 4, 5, 2, 6, 9, 9, 5, 5, 5, 5, 5]
2
[2, 3, 4, 5, 2, 6, 9, 9, 5, 5, 5, 5, 5]
4
5
2
[3, 4, 5, 2, 6, 9, 9, 5, 5, 5, 5, 5]
9
9
5
5
5
5
5

输出完成 (耗时 0 秒) - 正常终止
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051206/5e3643b1/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月06日 星期二 19:34

Leo Jay python.leojay at gmail.com
Tue Dec 6 19:34:28 HKT 2005

On 12/6/05, Li Weigang <dimens at gmail.com> wrote:
> 各位好,
>
> 一个list,如果要去除所有包含有特定值的元素。为什么下面的代码出现问题?请给解释一下,另外,如果要完成这个功能请给出一个最常用的方法,谢谢。如果是用pop,会提示出现list越界的错误。必须要用一个新的list么?谢谢。


>>> ll = [2,2,2,3,4,5,2,6,9,9,5,5,5,5,5]
>>> [x for x in ll if x!=2]
[3, 4, 5, 6, 9, 9, 5, 5, 5, 5, 5]
>>>

--
Best Regards,
Leo Jay

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月06日 星期二 19:37

林杰杰 linsoso at gmail.com
Tue Dec 6 19:37:04 HKT 2005

ll = [2, 2, 3, 4, 5, 2, 6, 9, 9, 5, 5, 5, 5, 5]

for i in range(ll.count(2)):
 ll.remove(2)

print ll
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20051206/5327072b/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月06日 星期二 19:50

limodou limodou at gmail.com
Tue Dec 6 19:50:51 HKT 2005

在 05-12-6,Li Weigang<dimens at gmail.com> 写道:
> 各位好,
>
> 一个list,如果要去除所有包含有特定值的元素。为什么下面的代码出现问题?请给解释一下,另外,如果要完成这个功能请给出一个最常用的方法,谢谢。如果是用pop,会提示出现list越界的错误。必须要用一个新的list么?谢谢。
>
> ll = [2,2,2,3,4,5,2,6,9,9,5,5,5,5,5]
> for x in ll:
>  print x
>  if x == 2:
>   ll.remove(x)
>   print ll
>

这个程序之所以有错是因为你在对ll遍历时却同时修改了它的内容。因此创建一个复本ll是比较好的方式。

实现你的功能 Leo Jay 的方法挺好。

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号