灌水 会 python 的进来看道题

萌新 · 2017年09月28日 · 最后由 王勋 回复于 2017年09月30日 · 1912 次阅读
l= [1,2,3]
d = {'a':[1,3,5,7],'b':[2,3,4,5]}
for x in d:
    for y in d[x]:
        if y in l:
            d[x].remove(y)
print(d)

结果:
{'a': [3, 5, 7], 'b': [3, 4, 5]}

python 用的 3.6,为什么 d 中的数组都只去掉了一个元素?

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 9 条回复 时间 点赞

[1,3,5,7] 的时候取出 1,然后删掉:
[1,3,5,7] ===》[3,5,7]

然后继续取到第二个 5,匹配不到。

恒温 回复

正解👍

请教下 for y in d[x]:这句,
字典可以直接用 d[x] 吗?不应该是 d.values() 吗?

KK 回复

d[x] 的 value 是啥?

KK 回复

上面的 x 表示 a,b, d['a']=[1,3,5,7]

特意去跑了下结果贴出来给有疑问的同学~:😜
x: a
y: 1
dx: [1, 3, 5, 7]
y: 5
dx: [3, 5, 7]
y: 7
dx: [3, 5, 7]
x: b
y: 2
dx: [2, 3, 4, 5]
y: 4
dx: [3, 4, 5]
y: 5
dx: [3, 4, 5]

d_new: {'a': [3, 5, 7], 'b': [3, 4, 5]}

我没理解错的话,这么写?

{k: list(filter(lambda t: t not in l, v)) for k, v in d.items()}
jacexh 回复

大神 😱 涨姿势了

恒温 回复

意思是取 y=1 做循环,remove(1)以后,列表变成 [3,5,7],但是 3 成了列表中的第一个,但是循环认为已经取过了第一个数据,就从 remove 以后的列表中取第二个数据 5,继续循环,从而跳过了 3?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册