繁体   English   中英

如何丢弃集合中的多个元素?

[英]How to discard multiple elements from a set?

我试图丢弃长度小于 10 的元素,但它不起作用。

a = {'ab', 'z x c v b n m k l j h g f f d s a a', 'q w e r t y u i o p'}
a.discard(x for x in a if len(x.split())<9) # discard elements with length<10
print(a)

我得到了这个 output:

{'zx c vbnmkljhgffdsa a', 'qwe r tyuio p', 'ab'}

'ab'不符合条件,不知道怎么还在?

我想要的 output 是:

{'zx c vbnmkljhgffdsa a', 'qwe r tyuio p'}

您需要在单个项目上调用discard ,而不是在要丢弃的项目生成器上调用:

for x in [x for x in a if len(x.split()) < 9]:
    a.discard(x)

请注意,您不能在遍历集合时丢弃项目,因此这将不起作用:

for x in a:
    if len(x.split()) < 9:
        a.discard(x)

虽然这超出了你的问题,但我想补充一点,有更好的方法可以通过集合理解或集合减法来做你想做的事情,如另一个答案和评论中所建议的那样。

您使用错误的方法从集合中删除元素。 discard 仅当元素存在时才从集合中删除该元素。 您希望根据条件删除元素,因此您需要使用不同的方法。 这是代码的更正版本:

a = {'ab', 'z x c v b n m k l j h g f f d s a a', 'q w e r t y u i o p'}
a = {x for x in a if len(x.split()) >= 9}
print(a)

此代码创建一个新集合,其中仅包含满足条件的元素,然后将其分配回 a。 实现了所需的 output:

{'z x c v b n m k l j h g f f d s a a', 'q w e r t y u i o p'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM