[英]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.