While循环不会改变索引

2024-05-14 04:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用Python编写一个代码,使用while循环返回列表中的第一个正数。这就是我所拥有的,但它不起作用

def positive(num):
    n= num[0]

### Can't change anything above 

首先,我尝试:

    i = 0
    while n <= 0:
        i += 1

但那不起作用,所以我试着:

    i = 0
    while i < len(num):
        n = num[i]
        while n <= 0:
            i += 1

##### Can't change below

    return n

我觉得我知道如何使用while循环,但改变列表的索引却让我大吃一惊


Tags: 代码列表lenreturndefchangecannum
3条回答

让我们先看看您的代码中有什么错误,或者需要修复什么

i = 0
while n <= 0:
    i += 1

在这里,您使用了良好的逻辑,但有一个问题。您的while循环一直运行到n<=0,当n是您当前的数字时,这是正确的。 在您的代码中,您只是更新i(索引),而不是当前编号

例如,以num=[-2,-3,4,5]为例,函数应该返回4。让我们干运行您的while循环。 在第一次迭代之前:

n=-2, i=0

循环条件:n<=0已满足,因此循环运行并i+=1 第一次迭代后(即第二次迭代前):

n=-2, i=1

请记住,我们没有对n执行任何操作,因此它保持原样。 再次循环条件:n<=0得到满足,因为-2<=0 所以我们做i+=1 第二次迭代后(即第三次迭代前):

n=-2, i=2

您是否注意到,通过这种方式,while循环条件将永远不会中断? 因此,通过这种方式,while循环将无输出地无限运行

因此,我们想到的最大问题是-那我们到底该怎么办? 简单的答案是,更新n,如下所示-

i = 0
while n <= 0:
    i += 1
    n=num[i]

现在,当我们运行它时,n(当前元素)将在循环的每个迭代中得到更新。也就是说,对于每个迭代,ni的值如下所示:

迭代1: 在此迭代之前:i=0, n=-2 循环条件:n<=0(已满足) 在这个迭代之后:i=1, n=-3 (n= num[i] , that is n=num[1]=-3)

迭代2: 之前:i=1, n=-3 条件:n<=0(满足) 之后:i=2,n=4

迭代3: 之前:i=2, n=4 条件:n<=0(不满足) 之后:循环不运行

因此,在循环结束后,我们将i设为2,这是正数的第一个索引

这段代码仍然存在一个小问题

我可以问你当num的所有元素都是负数时会发生什么吗? 即num数组/列表中不存在正元素时

循环条件n<=0,其中n是当前元素,将始终得到满足,因此i将在每次迭代后更新为i+1

<>考虑当{{CD28>}并且我们再次进入while循环时,让我们检查循环条件:^ {< CD29 >}和^ {CD2>}。 因此,我们进入循环并执行以下操作:

i+=1

那就是i=(length-1)+1 那就是i=length 现在呢 n=num[i]=num[length]我们都知道,在python中,索引从0开始,到length-1结束。 那么,当我们尝试以索引长度访问元素时,您认为会发生什么

多田🎉, 我们会找到索引器。为了更好地理解,请查看下面的代码

a=[1,2,3]
print(a[0])
print(a[1])
print(a[2])
print(a[3])

输出:

1                                                                                                                       
2                                                                                                                       
3                                                                                                                       
Traceback (most recent call last):                                                                                      
  File "main.py", line 5, in <module>                                                                                   
    print(a[3])                                                                                                         
IndexError: list index out of range 

那么,我们应该如何处理while循环中的这个错误呢? 只需设置另一个条件,即循环应该运行到i<length,即循环现在变为

i = 0
while i<len(num) and n <= 0:
    i += 1
    n=num[i]

所以,是的,现在它完成了。 我在下面写了一个完整的函数。在这里,在这个函数中,我不是在循环条件中使用n=num[i]然后使用n<=0,而是直接在循环条件中使用num[i]

def first_positive(num):
    i=0    # i is the current index
    while(i<len(num) and num[i]<=0):  # i<len(num) means run the while loop until there are elements in the num list
        i+=1
    if i==len(num):   # when there are no positive elements present in the list
        return "No positive element found"
    else:
        return num[i]
print(first_positive([-2,-3,5,10]))     # prints 5
print(first_positive([-2,-3,-5,10]))    # prints 10
print(first_positive([-2,-3,-5,-10]))   # prints No positive element found

使用与while循环基本相同的for loop

def first_neg(some_list):
    for item in some_list:
        if item < 0:
            return item

或者作为while变体:

def first_neg(some_list):
    i = 0
    while (i < len(some_list)):
        if some_list[i] < 0:
            return some_list[i]
        i += 1

也存在所谓的生成器函数,例如itertools.dropwhile()

from itertools import dropwhile

lst = [0, 1, 2, 3, 4, -5, 6]

rest = dropwhile(lambda x: x >= 0, lst)
print(next(rest))

他们都会屈服

-5

正如Mistermiagi所指出的,最好使用for循环。您还可以使用while循环:

def first_neg(num):
    i = 0
    while(i < len(num)):
        if(num[i] < 0):
            return num[i]
        i += 1
    return 1 # no negative numbers found

相关问题 更多 >