重複していると思います
最適なソリューションは次のとおりです。
somelist[:] = [tup for tup in somelist if determine(tup)]
私はそれがどのように機能するかを深く理解していませんが、機能しているようです!!!
今、私はそれがどのように機能するかを理解しています!! (2017/02/05)
私はPythonの初心者で、リストの反復と削除に何か奇妙なことがあると思います。これが私のコードです:
# -*- coding: utf-8 -*-s
#
# Fichier: testques.py
#
liste = [0,1,2,3,4,5,6,7,8,9]
cpt1=0
cpt2=0
cpt3=len(liste)
for i in liste:
if i != 2:
cpt1 += 1
else:
cpt2 += 1
del liste[i]
print cpt1
print cpt2
print cpt3
>python test.py
8
1
10
ご覧のとおり、8+1 は 10 ではありません。
私のことは、「i」はリストインデックスへの参照にすぎないということです。要素リストを削除すると、削除した要素の下にあるすべての要素が 1 レベル上がり、次の要素だけが for ... で解析されません。
次に、最終的に次の結果を得るという目標を達成するために、誰かが私を助けてくれませんか: 9 1 10
3つの回答後に編集 私の目標は、2に等しい要素の数を数えることではありません.
実際、私のリストの各要素は辞書であり、各辞書の xxx キーの値が正確に 7 桁でないすべてのリスト項目を削除したいと考えています。そして、きれいになったリストで他の操作を行った後。これが私が達成しようとしていることです。
最初の質問で十分に明確でなくて申し訳ありません。
これが私の実際のコードです:
cpt = 0
liste_longueur_totale = len(i)
liste_longueur_clean = 0
liste_delete = 0
numero = re.compile('^[0-9]{7}$')
for row in i:
if re.match(numero, row['j_numero']):
liste_longueur_clean += 1
cpt += 1
else:
liste_delete += 1
print liste_delete, '-', i[cpt]['j_id'], '-', i[cpt]['j_numero']
del i[cpt]
cpt += 1
print "%s : %s + %s" % (liste_longueur_totale,liste_longueur_clean,liste_delete )
print len(i)
「i」は703項目のリストです。それぞれが辞書です。
実行すると、次の結果が得られました。
703: 673 + 15
688
行なしで同じコードを実行すると:
del i[cpt]
私は次の結果を得ました:
703: 681 + 21
703
実際、21 個のアイテムが re.match() に応答していないことがわかっています。
では、ちょっと困惑!!!