吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1229|回复: 14
收起左侧

[已解决] Python 删除列表中特定元素的问题

[复制链接]
炸弹二锅头 发表于 2020-8-31 12:51
本帖最后由 炸弹二锅头 于 2020-8-31 19:06 编辑

data_source 数据源列表是一个嵌套列表,有一些地址,我想把省和直辖市选出来组成新的列表

[Python] 纯文本查看 复制代码
temp = [f"{i[1][:3]}" for i in data_source]# print(temp, len(temp))
keys = sorted(list(set(temp)), key=temp.index)
print(keys, len(keys))
# 由于用的前三个字符,所以“新疆”、“宁夏”要调整。
for k in keys:
    if k[:2] in ["宁夏", "新疆"]:
        keys.remove(k)

keys.extend(["宁夏", "新疆"])
print(keys, len(keys), "新疆巴" in keys)


输出结果:
[Python] 纯文本查看 复制代码
['北京市', '江苏省', '上海市', '浙江省', '河南省', '河北省', '辽宁省', '安徽省', '湖北省', '天津市', '内蒙古', '山东省', '黑龙江', '陕西省', '山西省', '吉林省', '甘肃省', '新疆乌', '新疆巴', '宁夏银', '青海省', '新疆阿', '海南省'] 23
['北京市', '江苏省', '上海市', '浙江省', '河南省', '河北省', '辽宁省', '安徽省', '湖北省', '天津市', '内蒙古', '山东省', '黑龙江', '陕西省', '山西省', '吉林省', '甘肃省', '新疆巴', '青海省', '海南省', '宁夏', '新疆'] 22 True


小白不明白的地方在于,为什么列表中的 “新疆巴” 还在,没有被删掉? 谢谢大佬们

PS:
[Python] 纯文本查看 复制代码
# 先把字典中的键,用列表的方式生成。要保留“省”、“市”所以用前三个字符切片
temp = [f"{i[1][:3]}" for i in data_source]
# print(temp, len(temp))
keys = list(set(temp))
print(keys, len(keys))
# 由于用的前三个字符,所以“新疆”、“宁夏”要调整。
for k in keys:
    if k[:2] in ['宁夏', '新疆']:
        keys.remove(k)

keys.extend(["宁夏", "新疆"])
print(keys, len(keys), "新疆巴" in keys)


我把排序命令去掉之后,每次列表顺序都随机,然后我发现,结果也是随机的,有时候就可以成功剔除我想要剔除的元素,有时候会随机留下来其它元素,每次都不一样。所以我觉得我应该换一种方式删除列表中的指定元素。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
王星星 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sz090955 发表于 2020-8-31 13:08
可能因为在for循环中有一个remove动作,remove完了导致原来的keys变化了,所以for完就有问题
aswcy815174418 发表于 2020-8-31 13:08
我java中还要用一个新的字符串类型来接收字符串
mlhqhj 发表于 2020-8-31 13:16
 楼主| 炸弹二锅头 发表于 2020-8-31 13:20
sz090955 发表于 2020-8-31 13:08
可能因为在for循环中有一个remove动作,remove完了导致原来的keys变化了,所以for完就有问题

对对对 ,我也觉得是这种可能 ,列表发生了变化,那个元素可能就被跳过去了,我不用sorted排序的时候,set()顺序随机的,我试验了几次,有时候就可以全部剔除成功,有时候剩下来的是其它元素,都不一定是“新疆巴”,但是我用sorted把顺序定下来之后,每次都会留下“新疆巴”这个元素。
置雨翻腾 发表于 2020-8-31 13:29
2L正解,print一下k就知道了
sz090955 发表于 2020-8-31 13:30
建议新建一个list,把要的加进去,或者直接[x for x in keys if x[:2] not in 【】],大概样子
 楼主| 炸弹二锅头 发表于 2020-8-31 13:36
sz090955 发表于 2020-8-31 13:30
建议新建一个list,把要的加进去,或者直接[x for x in keys if x[:2] not in 【】],大概样子

好的 谢谢
jackydengjie 发表于 2020-8-31 14:12
debug一下应该可以知道是什么回事了
陌路无人 发表于 2020-8-31 14:42
本帖最后由 陌路无人 于 2020-8-31 14:43 编辑

一行代码就够了,不用那么麻烦

[Python] 纯文本查看 复制代码
keys = ['北京市', '江苏省', '上海市', '浙江省', '河南省', '河北省', '辽宁省', '安徽省', '湖北省', '天津市', '内蒙古', '山东省', '黑龙江', '陕西省', '山西省', '吉林省', '甘肃省', '新疆乌', '新疆巴', '宁夏银', '青海省', '新疆阿', '海南省']
print(keys, len(keys))

keys = [i for i in keys if i[:2] not in ["宁夏", "新疆"]]

keys .extend(["宁夏", "新疆"])
print(keys , len(keys ), "新疆巴" in keys )
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 14:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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