1

我需要帮助找出这段代码。这是我的第一堂编程课,我们下周要考试,我正在尝试做旧考试。

我无法理解一类带有嵌套列表的类。它基本上说转换(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

4 回答 4

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),则列表不包含任何偶数。

于 2013-07-11T22:19:07.403 回答
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.

希望对您有所帮助,如果您需要任何进一步的解释,我将很乐意。

于 2013-07-11T22:54:13.927 回答
0
def first_even(L1):
    return ''.join('o' if all(n%2 for n in sl) else 'e' for sl in L1).find('e')
于 2013-07-11T23:01:06.237 回答
0

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

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

  • 您可能的意思是range(len(L1)),因为 range 需要一个整数。

  • 最后,当您只想添加索引时,您将整个列表添加到计数中。这可以通过 来实现.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
于 2013-07-11T22:26:52.760 回答