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
添加一次,然后继续下一个列表元素。遮盖