+ -
当前位置:首页 → 问答吧 → Python超菜鸟问题没反应过来怎么回事

Python超菜鸟问题没反应过来怎么回事

时间:2010-10-26

来源:互联网

Python code

list_1 = ['a', 'c','c']
for i in list_1:
    print('before process, list_1 is',list_1)
    if i == 'c':
        list_1.remove(i)            
    print('after process ,list_1 is ',list_1)



结果:
('before process, list_1 is', ['a', 'c', 'c'])
('after process ,list_1 is ', ['a', 'c', 'c'])
('before process, list_1 is', ['a', 'c', 'c'])
('after process ,list_1 is ', ['a', 'c'])

为什么只循环了2次,而不是3次变成['a']。经过测试发现问题就出在list_1.remove(i)语句上,谁能解释一下?

作者: oasistree   发布时间: 2010-10-26

因为你使用了
for i in list_1:
下面的list_1.remove(i)改变了这个列表,所以你需要COPY出来一个列表做remove操作

作者: selecthis   发布时间: 2010-10-26

那这个把list中所有出现的指定元素都移除的操作应该怎样实现

作者: oasistree   发布时间: 2010-10-26

Python code

list_1 = ['a', 'c','c']
a = [one for one in list_1 if one != 'c']

作者: selecthis   发布时间: 2010-10-26

list comprehension?

作者: oasistree   发布时间: 2010-10-26