私は set を持っていmyset
て、それを繰り返し処理してアイテムに対して何らかの操作を実行する関数を持っています。この操作は最終的にセットからアイテムを削除します。
明らかに、元のセットを反復しながらそれを行うことはできません。ただし、これを行うことができます:
mylist = list(myset)
for item in mylist:
# do sth
もっと良い方法はありますか?
私は set を持っていmyset
て、それを繰り返し処理してアイテムに対して何らかの操作を実行する関数を持っています。この操作は最終的にセットからアイテムを削除します。
明らかに、元のセットを反復しながらそれを行うことはできません。ただし、これを行うことができます:
mylist = list(myset)
for item in mylist:
# do sth
もっと良い方法はありますか?
まず、セットを使用すると、Zero Piraeus が私たちに言ったように、次のことができます。
myset = set([3,4,5,6,2])
while myset:
myset.pop()
print(myset)
print
これらの出力を提供するメソッドを追加しました
>>>
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))
別の方法は次のとおりです。
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)
ライブラリを使用しcopy
てセットのコピーを作成し、コピーを反復して元のセットから削除します。ループに固執し、for
1 つの要素を 1 回だけ反復したい場合 - 必ずしもすべての要素を削除したくない場合に便利です。
import copy
for item in copy.copy(myset):
myset.remove(item)