鱼C论坛

 找回密码
 立即注册
查看: 2497|回复: 9

如何去除列表中所有符合要求的元素

[复制链接]
发表于 2016-11-10 17:52:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 gqhaha 于 2016-11-10 18:09 编辑



比如这个列表,要去掉type=aa的

list=[{'type':'aa','year':'1920'},{'type':'aa','year':'1930'},{'type':'bb','year':'1940'}]





我一开始用这个

for line in list:
    if line['type'] =='aa':
        list.remove(line)

只能去掉一个



后来只能建一个临时列表,把符合的值加入,或者用列表推导
还有别的简单一点的方法吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-10 18:11:20 | 显示全部楼层
本帖最后由 SixPy 于 2016-11-11 08:12 编辑

ls=[{'type':'aa','year':'1920'},{'type':'aa','year':'1930'},{'type':'bb','year':'1940'}]
for x in range(len(ls))[::-1]:
    if ls[x]['type'] =='aa':
        ls.pop(x) #.remove(ls[x])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 19:39:19 | 显示全部楼层
  1. list1=[{'type':'aa','year':'1920'},{'type':'aa','year':'1930'},{'type':'bb','year':'1940'}]
  2. list1 = [x for x in list1 if x['type'] != 'aa']
  3. print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 22:41:42 | 显示全部楼层


版主高明,用了一个带判断的列表映射,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 23:14:09 | 显示全部楼层
SixPy 发表于 2016-11-10 18:11
for x in range(len(list))[:-1]:
    if list[x]['type'] =='aa':
        list.pop(x) #.remove(list[x ...

明显你这个有问题,每当你删除一个元素,你列表的长度就发生变化了,但你还在用删除之前的index号去处理发生变化的列表,比如index0号位的元素是aa被你删除了,之前的index1号位在新的列表中就变成了0号位,接下来你又用1号index去查找,如果之前的1号位是aa,现在变成0号位,就会被漏掉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 23:26:52 | 显示全部楼层
我研究了一下,你的错误这个跟Sixpy的答案一样,你在迭代的过程中去修改被跌的对象导致如果是连续2个都是要修改的对象时,第二个会被忽略掉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 23:28:04 | 显示全部楼层
本帖最后由 jackie-L 于 2016-11-10 23:29 编辑

真心觉得你这个问题让我学到不少东西啊。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 08:12:55 | 显示全部楼层
jackie-L 发表于 2016-11-10 23:14
明显你这个有问题,每当你删除一个元素,你列表的长度就发生变化了,但你还在用删除之前的index号去处理 ...

漏写一个冒号 :
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-12 22:45:38 | 显示全部楼层

不错从列表最后开始往前查询,不错,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-16 17:12:26 | 显示全部楼层
看来还是列表推导方便一点啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-23 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表