我有一组myset
,和我有过它迭代执行其项目的部分操作的功能,该操作最终从集合中删除的项目。
很显然,我不能这样做,同时仍超过原设定迭代。 我可以,但是,这样做:
mylist = list(myset)
for item in mylist:
# do sth
有没有更好的办法?
我有一组myset
,和我有过它迭代执行其项目的部分操作的功能,该操作最终从集合中删除的项目。
很显然,我不能这样做,同时仍超过原设定迭代。 我可以,但是,这样做:
mylist = list(myset)
for item in mylist:
# do sth
有没有更好的办法?
首先,使用一组,作为零比雷埃夫斯告诉我们,你可以
myset = set([3,4,5,6,2])
while myset:
myset.pop()
print myset
我添加了一个打印方法给予这些输出
>>>
set([3, 4, 5, 6])
set([4, 5, 6])
set([5, 6])
set([6])
set([])
如果你要坚持你的选择。一个名单,我建议你深拷贝使用列表理解,并遍历所有的副本列表,同时消除从初始列表项。 在我的例子,我做原单减少的长度在每个循环。
l = list(myset)
l_copy = [x for x in l]
for k in l_copy:
l = l[1:]
print l
给
>>>
[3, 4, 5, 6]
[4, 5, 6]
[5, 6]
[6]
[]
这应该工作:
while myset:
item = myset.pop()
# do something
或者,如果你需要有条件地删除项目:
def test(item):
return item != "foo" # or whatever
myset = set(filter(test, myset))
让我们回到所有偶数而修改当前设置。
myset = set(range(1,5))
myset = filter(lambda x:x%2==0, myset)
print myset
将返回
>>> [2, 4]
如果有机会使用总是使用 lambda
它会让你的生活更轻松。
另一种方式可以是:
s=set()
s.add(1)
s.add(2)
s.add(3)
s.add(4)
while len(s)>0:
v=next(iter(s))
s.remove(v)