在i上迭代时从集合中删除项

2024-10-02 00:40:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个集合myset,我有一个函数遍历它对它的项执行一些操作,这个操作最终会从集合中删除该项。

很明显,我不能在迭代原始集合的时候做这件事。不过,我可以这样做:

mylist = list(myset)
for item in mylist:
    # do sth

有更好的办法吗?


Tags: 函数inforitemdolist办法mylist
3条回答

让我们在修改当前集时返回所有偶数。

myset = set(range(1,5))
myset = filter(lambda x:x%2==0, myset)
print myset

会回来的

>>> [2, 4]

如果有机会的话,利用机会,总是利用机会,这会使你的生活更容易。

首先,按照比雷埃夫斯告诉我们的,用一套,你可以

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))

相关问题 更多 >

    热门问题