从python的嵌套数字列表中获取第一个偶数
我需要帮助找出这个密码。这是我的第一节编程课,下周我们有一个考试,我正试着做以前的考试 有一个类具有嵌套列表,我很难理解。它基本上说是转换从python的嵌套数字列表中获取第一个偶数,python,python-3.x,Python,Python 3.x,我需要帮助找出这个密码。这是我的第一节编程课,下周我们有一个考试,我正试着做以前的考试 有一个类具有嵌套列表,我很难理解。它基本上说是转换(list of[list of int])->int 基本上给定一个列表,其中有一个偶数,在这个例子中,0是偶数,返回索引,如果没有偶数,我们返回-1 同时给出了三个例子 >>> first_even([[9, 1, 3], [2, 5, 7], [9, 9, 7, 2]]) 1 >>> first_even([[1, 3
(list of[list of int])->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
我们在课堂上使用Python3,我有点想从哪里开始,但我知道这是错误的。但我会试一试
def first_even(L1):
count = 0
for i in range(L1):
if L1[i] % 2 = 0:
count += L1
return count
我以为是这样的,但没有成功
如果你们能帮我提供一些提示或解决方案,这将对我很有帮助。如果我理解正确,并且您希望返回至少包含一个偶数的第一个列表的索引:
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
是一个方便的内置函数,如果是iterable,它将同时为您提供索引和项,因此您不需要处理丑陋的范围(len(L1))
和索引
是另一个内置的。如果所有余数均为非零(因此计算结果为
True
),则列表不包含任何偶数。如果我理解正确,并且您希望返回包含至少一个偶数的第一个列表的索引:
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
是一个方便的内置函数,如果是iterable,它将同时为您提供索引和项,因此您不需要处理丑陋的范围(len(L1))
和索引
是另一个内置的。如果所有余数都非零(因此计算结果为
True
),则列表中不包含任何偶数。您的代码存在一些小问题:
使用了错误的运算符L1[i]%2=0
用于为变量赋值,而=
用于相等=
- 您可能指的是
,因为range需要一个整数range(len(L1))
- 最后,当您只想添加索引时,您正在将整个列表添加到计数中。这可以通过
实现,但这不适用于列表中的重复项。您可以使用.index()
,如下所示枚举
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
您的代码存在一些小问题:
使用了错误的运算符L1[i]%2=0
用于为变量赋值,而=
用于相等=
- 您可能指的是
,因为range需要一个整数range(len(L1))
- 最后,当您只想添加索引时,您正在将整个列表添加到计数中。这可以通过
实现,但这不适用于列表中的重复项。您可以使用.index()
,如下所示枚举
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
这就是我想到的
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.
希望有帮助,如果您需要任何进一步的解释,我很乐意。以下是我的想法
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
def first_even(L1):
return ''.join('o' if all(n%2 for n in sl) else 'e' for sl in L1).find('e')
首先是修复。您需要将==用于“等于”,而“=”用于分配变量
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.
希望它能帮助你,如果你需要任何进一步的解释,我会很乐意的。+1为了给它一个机会,请说出什么不起作用。您收到了一条与
范围(L1)
+1相关的错误消息,请告诉它什么不起作用。您收到了一条与范围(L1)
相关的错误消息,我认为任何(x%2==0表示l中的x)
的可读性更强一些。。。(就其检查内容而言)@JonClements可能有一点:)但你必须同意,从逻辑的角度来看,所有到任何的转换都是微不足道的。比下一步更可读(i代表i,v在枚举(a)中,如果有的话(el%2==0代表el in v)),-1)
无论如何……漂亮而简洁的代码,但我认为值得指出的是,range(len(x))在Python入门类中非常常用,因此熟悉它可能仍然很好。@JonClements感谢上帝,我不知道next
有一个default
参数:)谢谢!我认为any(x%2==0表示l中的x)
更具可读性。。。(就其检查内容而言)@JonClements可能有一点:)但你必须同意,从逻辑的角度来看,所有到任何的转换都是微不足道的。比下一步更可读(i代表i,v在枚举(a)中,如果有的话(el%2==0代表el in v)),-1)
无论如何……漂亮而简洁的代码,但我认为值得指出的是,range(len(x))在Python入门类中非常常用,因此熟悉它可能仍然很好。@JonClements感谢上帝,我不知道next
有一个default
参数:)谢谢!我不理解你的代码,它不满足示例?对现有代码还有两个修复:因为L1是列表列表的列表,所以需要遍历每个子列表。如果您不使用enumerate(尽管enumerate很好),实现这一点的方法是使用一个循环,例如“for j in range(len(L1[i])”。在该内部循环中,您可以检查L1[i][j]%2==0,如果是,您可能只想返回i。似乎count变量最终只会计算偶数。我不理解您的代码,它不满足示例?现有代码还有两个修复:由于L1是列表列表,您需要遍历每个子列表。如果您没有使用enumerate(alth
def first_even(L1):
return ''.join('o' if all(n%2 for n in sl) else 'e' for sl in L1).find('e')