从python的嵌套数字列表获得第一个

时间:2013-07-11 21:50:29

标签: python python-3.x

我需要帮助搞清楚这段代码。这是我的第一个编程课,下周我们将参加考试,我正在尝试做旧考试。

有一个嵌套列表的类我无法理解。它基本上是要转换(list of [list of ints]) -> int

基本上给出了一个列表,其中有一个偶数,在这种情况下,0甚至返回该索引,如果没有偶数,我们返回-1。

我们还给出了三个例子

>>> first_even([[9, 1, 3], [2, 5, 7], [9, 9, 7, 2]])
1
>>> first_even([[1, 3, 5], [7, 9], [1, 0]])
2
>>> first_even([[1, 3, 5]])
-1

我们在课堂上使用python 3,我有点想知道从哪里开始,但我知道它错了。但生病了试试

def first_even(L1):
    count = 0
    for i in range(L1):
       if L1[i] % 2 = 0:
           count += L1
    return count

我以为这就是它,但它没有成功。

如果你们能帮我解决这个问题,或者解决这个问题,那对我有帮助。

4 个答案:

答案 0 :(得分:1)

如果我理解正确并且您想要返回包含至少一个偶数的第一个列表的索引:

In [1]: def first_even(nl):
   ...:     for i, l in enumerate(nl):
   ...:         if not all(x%2 for x in l):
   ...:             return i
   ...:     return -1
   ...: 

In [2]: first_even([[9, 1, 3], [2, 5, 7], [9, 9, 7, 2]])
Out[2]: 1

In [3]: first_even([[1, 3, 5], [7, 9], [1, 0]])
Out[3]: 2

In [4]: first_even([[1, 3, 5]])
Out[4]: -1

enumerate是一个方便的内置函数,如果是可迭代的,它会为你提供索引和项目,所以你不需要弄乱丑陋的range(len(L1))和索引。

all是另一个内置的。如果所有余数都不为零(因此评估为True),则列表不包含任何偶数。

答案 1 :(得分:0)

您的代码存在一些小问题:

  • L1[i] % 2 = 0正在使用错误的运算符。 =用于为变量赋值,而==用于相等。

  • 您可能需要range(len(L1)),因为范围需要一个整数。

  • 最后,当您只想添加索引时,您将整个列表添加到计数中。这可以通过.index()实现,但这不适用于列表中的重复项。您可以使用enumerate,我将在下面显示。

如果你曾经使用索引,enumerate()就是你的功能:

def first_even(L):
    for x, y in enumerate(L):
        if any(z % 2 == 0 for z in y): # If any of the numbers in the subsists are even
            return x # Return the index. Function breaks
    return -1 # No even numbers found. Return -1

答案 2 :(得分:0)

所以这就是我想出来的。

def first_even(L1):
    for aList in range(len(L1)):
        for anItem in range(len(L1[aList])):
           if L1[aList][anItem] % 2 == 0:
               return aList
    return -1

首先修复一下。您需要使用==表示“等于”,“=”表示分配变量。

L1[i] % 2 == 0

对于代码来说,这里有一些伪代码风格的想法:

Iterate through the list of lists (L1):
    Iterate through the list's (aList) items (anItem):
        if List[current list][current item] is even:
            Return the current list's index
Return -1 at this point, because if the code gets this far, an even number isn't here.

希望它有所帮助,如果您需要任何进一步的解释,那么我会很高兴。

答案 3 :(得分:0)

def first_even(L1):
    return ''.join('o' if all(n%2 for n in sl) else 'e' for sl in L1).find('e')