pythonはforループでpop配列の時にある要素をスキップする問題を解決します。


今日はpythonを勉強している時に問題があります。一つの配列を循環して一つの数を指定します。配列内に同じ要素があれば削除します。
1.メモリを追加できないという前提で、この配列内で処理します。

nums = [0,1,2,2,3,0,4,2]
val = 2
for i in nums:
 if(i == val):
  idx = nums.index(i)
  nums.pop(idx)
print(nums)
最初はこう書くと出力します。
[0,1,2,3,0,4]//中間の2は削除されていませんでした。
そして私は修正しました。サイクルを全部出してみます。

0loop [0, 1, 2, 2, 3, 0, 4, 2]
1loop [0, 1, 2, 2, 3, 0, 4, 2]
2loop [0, 1, 2, 3, 0, 4, 2]//      
3loop [0, 1, 2, 3, 0, 4, 2]
4loop [0, 1, 2, 3, 0, 4, 2]
5loop [0, 1, 2, 3, 0, 4, 2]
6loop [0, 1, 2, 3, 0, 4]
理由はPythonでforサイクルはローズマリーで実現されているため、ポップメソッドは現在の要素を削除した後、削除された位置は後ろのカバーによって、サイクルは次の要素に自動的に指し、その2がスキップされたのと同じです。
ネット検索のいくつかの処理方法はこれに似合います。

for i in nums[:]: //   nums[:]        ,        。
  if(i == val):
    idx = nums.index(i)
    nums.pop(idx)
出力
[0,1,3,0,4]
知識を補充します:pythonの中でfor循環(continue、break、pass)の用法
1、continueは現在をスキップして次のサイクルを実行します。

l = ['a','b','c','d','e']
for i in l:    #i  l         
  if i == 'c':
    continue   #continue                 
  print(i)

2、breakは直接循環を中断し、もう実行しない。

l = ['a','b','c','d','e']
for i in l:
  if i == 'c':
    break #break      ,break         
  print(i)

3、パスは何も操作しないで、循環します。

l = ['a','b','c','d','e']
for i in l:  #i  l         
  if i == 'c':
    pass
  print(i)

以上は個人の経験ですので、参考にしていただければと思います。もし間違いがあったり、完全に考えていないところがあれば、コメント検討を歓迎します。