热线电话:13121318867

登录
2022-04-24 阅读量: 782
Python在使用遍历语句删除列表中满足一定条件的元素时应注意列表是可变的集合,删除某一元素后列表索引的位置会发生改变,导致原本符合过滤条件的元素也未被删除掉

题目:strings=["a","as","bat","car","dove","python"] 过滤掉长度小于等于2的字符串。

一开始我写的代码如下,发现"as"也满足条件,但是并没有被删除。

strings=["a","as","bat","car","dove","python"]
for i in strings:
    if len(i)<=2:
        strings.remove(i)
strings

下面是代码的运行结果:

image.png

可以看到,as”这个字符串是满足长度小于或等于2的条件,但是并没有从strings的列表中删除。

这是因为列表是可更改的集合,在第一次遍历时,列表的第一个元素“a”会被删除,strings也就变成了["as","bat","car","dove","python"] ,此时遍历strings的第二个元素是“bat”,"as"被忽略掉了,也就不会出现在长度是否小于或等于2的条件判断中了,最终导致"as"这个元素无法被过滤掉。


验证

输入以下代码,可以看到每个元素对应的位置

strings=["a","as","bat","car","dove","python"]
for i,j in enumerate(strings):
    print(i,j)                     
strings

#运行结果:
"""
0 a
1 as
2 bat
3 car
4 dove
5 python
"""

加入过滤条件,在"a"被剔除后,bat的位置由2变成了1,第二次遍历的是bat,,"as"无法被遍历到

strings=["a","as","bat","car","dove","python"]
for i,j in enumerate(strings):
    print(i,j)                 #"a"剔除后,bat的位置由2变成了1,第二次遍历的是bat
    if len(j)<=2:
        strings.remove(j) 
strings

#运行结果:
"""
0 a
1 bat
2 car
3 dove
4 python
"""

解决方案:生成一个新的列表来接收满足条件的元素

strings=["a","as","bat","car","dove","python"]
new_strings=[]
for i in strings:
    if len(i)>2:
       new_strings.append(i)
new_strings

以上就是我目前的解决方案,如果大家还有更好的方法敬请指教!


参考资料:https://www.jb51.net/article/184893.htm

image.png


125.1134
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子