sky*_*ork 35 python set python-2.7
我有一个集合myset,我有一个函数迭代它对它的项目执行一些操作,这个操作最终删除集合中的项目.
显然,我仍然无法继续迭代原始集合.但是,我可以这样做:
mylist = list(myset)
for item in mylist:
# do sth
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
kir*_*off 20
首先,使用一套,如比雷埃夫斯告诉我们的那样,你可以
myset = set([3,4,5,6,2])
while myset:
myset.pop()
print myset
Run Code Online (Sandbox Code Playgroud)
我添加了一个打印方法来提供这些输出
>>>
set([3, 4, 5, 6])
set([4, 5, 6])
set([5, 6])
set([6])
set([])
Run Code Online (Sandbox Code Playgroud)
如果你想坚持你的选择列表,我建议你使用列表理解深度复制列表,并循环复制,同时从原始列表中删除项目.在我的例子中,我在每个循环中使原始列表的长度减少.
l = list(myset)
l_copy = [x for x in l]
for k in l_copy:
l = l[1:]
print l
Run Code Online (Sandbox Code Playgroud)
给
>>>
[3, 4, 5, 6]
[4, 5, 6]
[5, 6]
[6]
[]
Run Code Online (Sandbox Code Playgroud)
Zer*_*eus 11
这应该工作:
while myset:
item = myset.pop()
# do something
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要有条件地删除项目:
def test(item):
return item != "foo" # or whatever
myset = set(filter(test, myset))
Run Code Online (Sandbox Code Playgroud)
让我们在修改当前集合时返回所有偶数。
myset = set(range(1,5))
myset = filter(lambda x:x%2==0, myset)
print myset
Run Code Online (Sandbox Code Playgroud)
将返回
>>> [2, 4]
Run Code Online (Sandbox Code Playgroud)
如果有机会利用,总是使用 lambda它会使您的生活更轻松。
小智 5
另一种方法可能是:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25106 次 |
| 最近记录: |