Python 此列表输出有问题。有人帮我吗?为什么我得到这个输出

Python 此列表输出有问题。有人帮我吗?为什么我得到这个输出,python,python-3.x,list,Python,Python 3.x,List,我开始学习python并编写了这段代码,但编译器打印了我在下面显示的结果。这是什么原因 a = [0, 56, 242, 241, 312, 3124, 1] for x in range(0,len(a)-1): if a[x]< 100: del(a[x]) print(a) a=[0,56,242,241,312,3124,1] 对于范围(0,len(a)-1)内的x: 如果a[x]

我开始学习python并编写了这段代码,但编译器打印了我在下面显示的结果。这是什么原因

a = [0, 56, 242, 241, 312, 3124, 1]

for x in range(0,len(a)-1):
    if a[x]< 100:
        del(a[x])
print(a)
a=[0,56,242,241,312,3124,1]
对于范围(0,len(a)-1)内的x:
如果a[x]<100:
del(a[x])
印刷品(a)

结果:
[56242,241,3123124]
a=[0,56242,241,312,3124,1]
a = [0, 56, 242, 241, 312, 3124, 1]

for x in a[:-1]:
    if x< 100:
        a.remove(x)
对于a[:-1]中的x: 如果x<100: a、 删除(x)

循环遍历列表“a”中的每一项,最后一项1除外,它使用一个名为x的迭代器来表示正在调查的当前列表项。如果该项x小于100,我们将其从“a”中删除。

在迭代列表时不要更改列表的长度。如果
在循环内部打印(a,x,a[x])
,您将看到问题。
[i for i in a If i>100]
如果元素值小于100,您将从数组a中移除,这就是问题发生的原因。这是您程序的逻辑。@Ajay他不想查看所有项目,所以这不起作用。列表中的最后一个1需要单独考虑。请尝试以下操作:
a=[a if not item<100]中的item for item
,虽然它可能会起作用,但最好解释一下原因,并且在这种特定情况下它起作用的原因并不完全清楚。如果列表的最后一项不被排除在筛选之外呢?您将如何更改此代码?(顺便说一句,我不相信OP真的想这么做,
len(a)-1
中的
-1
可能只是因为他不知道范围的上限不包括在内……。@Thierrylahuille现在补充了一些评论。你可能是对的,他想包括1。好吧,它没有解释为什么它起作用的根本原因,为什么它只在这个非常具体的案例中起作用。您根本不在
a
上迭代,而是在其副本上迭代(减去最后一项)。对列表进行切片可以得到一个副本,因此使用
del
a
所做的更改不会改变您迭代的内容。我会在这段代码上发布一个大大的警告,因为我希望许多看到这一点并希望迭代整个列表(包括最后一项)的人都会在a:中为x编写
,因为没有理由进行切片-这会失败,原因与问题中的代码失败相同。作为一个旁注,“迭代器”在Python中有非常特殊的含义;你可以看看