索引中出现的负数查找器

时间:2016-10-21 14:02:06

标签: python list function loops range

在first_neg上写一个func /,它带有一个(可能是空的)列表 数字作为输入参数,查找第一次出现的a nega / ve数字,并返回索引(即。中的posi / on) 这个号码的列表)。如果列表中没有包含nega / ve数字或者它 为空,程序应返回None。使用while循环(和 不是为了循环)你的while循环应该停止循环一次 找到第一个nega / ve号码。

这是我老师问我任何想法的问题:

def first_neg(list):
    count = 0
    for number in list:
        if number < 0:
            count += 1
            return count

Dosent似乎工作正常我刚刚加入第一篇帖子希望可以得到一些帮助

2 个答案:

答案 0 :(得分:1)

x = [1,2,3,-5]

def first_neg(list):
    count = 0
    for number in list:
        count += 1      #moved it outside of the if
        if number < 0:
            return count

print(first_neg(x))   #prints 4

如果您找到了答案,但每次count循环时,您都希望增加forloops。请注意,此方法返回4这是列表中的第四项,而不是索引,列表的索引从0开始,因此访问它将是3。我们的列表x = [1,2,3,-5]-5位于列表的第四个插槽中,但要访问它,我们必须调用x[3],因为列表从0索引开始。

如果要返回找到第一个负数的列表索引,请尝试:

x = [1,2,3,-5]

def first_neg(list):
    for count, number in enumerate(list):
        if number < 0:
            return count

print(first_neg(x)) # prints 3

这是因为枚举会创建一个&#34;配对&#34;列表中的项目,它是当前计数。每次从列表中获取项目时,枚举只从0开始计数。

另外作为旁注(我在答案中没有改变它,因为我希望你理解发生了什么)。不要将你的变量命名为list,tuple,int,str ...这只是一个坏主意和习惯,它可以正常运行,但它可能会导致问题。

答案 1 :(得分:1)

遇到负面元素后立即返回索引。否则增加指数:

    def first_neg(lst):
        count = 0
        while count < len(lst):
            if  lst[count] < 0:
                return count
            count = count + 1
        return None

注意:如果使用enumerate()而不是使用额外的count变量,那就更好了。你提到的代码不是用pythonic方式编写的。

你也可以试试这个:

   def first_neg(lst):
        res = [i for i,x in enumerate(lst) if x<0]
        return None if res == [] else res[0]

使用@Chris_Rands建议的生成器可以改进上面的代码。