我认为重复
最佳解决方案是:
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”只是对列表索引的引用。当我删除元素列表时,我删除的元素下面的所有元素都会上升一级,然后下一个元素不会被 for ... in 解析。
那么有人可以帮助我实现最终获得以下结果的目标: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()
然后,我有点困惑!