Python 在for循环中

Python 在for循环中,python,while-loop,Python,While Loop,我想知道列表中第一个出现的零的数量,在任何其他数字之前 例如: L1=[0,0,0,0,0,1,2]-输出应该是5,这是零的数量。 L2=[1,0,0,0,0,0,2]-输出应为零。虽然此列表中有5个零,但列表以1开头 这是我的密码: k = 0 for i in L1: while i == 0: k = k + 1 但它不起作用。我认为这是一个无限循环,但我不知道为什么。想想当I设置为0时会发生什么 while循环将启动且永不停止,因为i在该循环中不会更改 你最好根

我想知道列表中第一个出现的零的数量,在任何其他数字之前

例如:
L1=[0,0,0,0,0,1,2]
-输出应该是5,这是零的数量。
L2=[1,0,0,0,0,0,2]
-输出应为零。虽然此列表中有5个零,但列表以1开头

这是我的密码:

k = 0
for i in L1:
    while i == 0:
        k = k + 1

但它不起作用。我认为这是一个无限循环,但我不知道为什么。

想想当
I
设置为
0
时会发生什么

while
循环将启动且永不停止,因为
i
在该循环中不会更改

你最好根据下面的文字记录做点修改:

>>> list1 = [0,0,0,0,0,1,2]
>>> count = 0
>>> for item in list1:
...     if item == 0:
...         count = count + 1
...     else:
...         break
... 
>>> print count
5
或稍短的变化,对于非零值立即中断,否则加一:

>>> list1 = [0,0,0,0,0,1,2]
>>> count = 0
>>> for item in list1:
...     if item != 0: break
...     count = count + 1
... 
>>> print count
5

想想当
i
第一次设置为
0
时会发生什么

while
循环将启动且永不停止,因为
i
在该循环中不会更改

你最好根据下面的文字记录做点修改:

>>> list1 = [0,0,0,0,0,1,2]
>>> count = 0
>>> for item in list1:
...     if item == 0:
...         count = count + 1
...     else:
...         break
... 
>>> print count
5
或稍短的变化,对于非零值立即中断,否则加一:

>>> list1 = [0,0,0,0,0,1,2]
>>> count = 0
>>> for item in list1:
...     if item != 0: break
...     count = count + 1
... 
>>> print count
5

正如其他评论员所说,代码中的问题在于,您似乎误解了
while
关键字的含义。除此之外,对于此类问题,我通常更喜欢功能性更强的风格:

>>> import itertools
>>> k = len(list(itertools.takewhile(lambda x: x == 0, L1)))
>>> k
5
>>> k = len(list(itertools.takewhile(lambda x: x == 0, L2)))
>>> k
0

如果您刚刚开始了解Python,那么玩弄
itertools
提供的东西是非常值得的。

正如其他评论员所说,代码中的问题是您似乎误解了
while
关键字的含义。除此之外,对于此类问题,我通常更喜欢功能性更强的风格:

>>> import itertools
>>> k = len(list(itertools.takewhile(lambda x: x == 0, L1)))
>>> k
5
>>> k = len(list(itertools.takewhile(lambda x: x == 0, L2)))
>>> k
0

如果您刚刚开始了解Python,那么使用
itertools
提供的工具是非常值得的。

我的答案将扩展到paxdiablo。感谢他澄清了OP对L2案件的意图,这是我误读的

虽然
itertools
对于这类东西来说很方便,但就目前的情况而言,我认为掌握基本的语言特性是值得的

在代码中,可以执行以下操作:

L1 = [0, 0, 0, 0, 0, 1, 2]

k = 0
for i in L1:
    while i == 0:
        k = k + 1
当您在
L1
上运行这段代码时,它将永远循环。原因如下:

for
导致封闭的代码(指下面通过缩进留出的代码)循环。因此,对于L1中的i:循环,对于L1中的每件事情,都会运行一次缩进到它下面的所有内容

但是,
while
做了类似的事情
while
告诉Python反复运行它下面的缩进代码,直到
while
语句上的条件为
False

因此,在
L1
的情况下,第一次通过
for
循环时,
i
设置为0。然后,
当i==0时:
要求反复执行所包含的代码,
k=k+1
,直到
i
不再为零。不幸的是,由于
while
循环中的代码不会更改
i
的值,
i
将一直为零,直到时间结束,因此它将永远运行,并反复向
k
添加一个

您要查找的是一个不会循环的
if
语句。根据测试是否正确,它将只运行附带的代码。因此,不是:

    while i == 0:
        k = k + 1
你可以用

    if i == 0:
        k = k + 1
    else:
        break
然后,每次通过
for
循环,代码都会询问
i
是否为零,如果为零,则只会向
k
添加一次,然后继续下一个列表元素。为了覆盖L2情况,如果您输入的数字不是零,
break
将退出
for
循环并停止计数


itertools
给出的答案聪明、有用、易懂,并且可能是您想要在非常大的列表中使用的,但由于您似乎只是在学习该语言(可能是学习您的第一语言),因此值得学习如何使用
for
,而
,如果正确的话,

我的答案将扩展到paxdiablo。感谢他澄清了OP对L2案件的意图,这是我误读的

虽然
itertools
对于这类东西来说很方便,但就目前的情况而言,我认为掌握基本的语言特性是值得的

在代码中,可以执行以下操作:

L1 = [0, 0, 0, 0, 0, 1, 2]

k = 0
for i in L1:
    while i == 0:
        k = k + 1
当您在
L1
上运行这段代码时,它将永远循环。原因如下:

for
导致封闭的代码(指下面通过缩进留出的代码)循环。因此,对于L1中的i:
循环,对于L1中的每件事情,都会运行一次缩进到它下面的所有内容

但是,
while
做了类似的事情
while
告诉Python反复运行它下面的缩进代码,直到
while
语句上的条件为
False

因此,在
L1
的情况下,第一次通过
for
循环时,
i
设置为0。然后,
当i==0时:
要求反复执行所包含的代码,
k=k+1
,直到
i
不再为零。不幸的是,由于
while
循环中的代码不会更改
i
的值,
i
将一直为零,直到时间结束,因此它将永远运行,并反复向
k
添加一个

您要查找的是一个不会循环的
if
语句。根据测试是否正确,它将只运行附带的代码。因此,不是:

    while i == 0:
        k = k + 1
你可以用

    if i == 0:
        k = k + 1
    else:
        break
然后,每次通过
for
循环,代码都会询问
i
是否为零,如果为零,则只会向
k
添加一次,然后继续下一个列表元素。遮盖