炸弹二锅头 发表于 2020-8-31 12:51

Python 删除列表中特定元素的问题

本帖最后由 炸弹二锅头 于 2020-8-31 19:06 编辑

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

temp = [: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)

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

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

PS:
# 先把字典中的键,用列表的方式生成。要保留“省”、“市”所以用前三个字符切片
temp = [: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)

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

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,把要的加进去,或者直接 not in 【】],大概样子

炸弹二锅头 发表于 2020-8-31 13:36

sz090955 发表于 2020-8-31 13:30
建议新建一个list,把要的加进去,或者直接 not in 【】],大概样子

好的 谢谢

jackydengjie 发表于 2020-8-31 14:12

debug一下应该可以知道是什么回事了

陌路无人 发表于 2020-8-31 14:42

本帖最后由 陌路无人 于 2020-8-31 14:43 编辑

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

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

keys = not in ["宁夏", "新疆"]]

keys .extend(["宁夏", "新疆"])
print(keys , len(keys ), "新疆巴" in keys )
页: [1] 2
查看完整版本: Python 删除列表中特定元素的问题