问题是:
给出"二维列表"整数 - 即每个列表 它中的值是一个整数列表 - 找到所有偶数并将它们加在一起。
第一个是我的第一次尝试,我似乎成功地使用了1个列表。然后我尝试使用2D列表,这段代码给了我一个错误∫ int object is not subscriptible'我认为这与我的同时声明有关。任何帮助将不胜感激,谢谢!
def sum_even(xss):
result = 0
for item in xss:
if item % 2 == 0:
result = result + item
return result
ans = sum_even([4,8])
print (ans)
def sum_even(xss):
result = 0
n = 0
i = 0
j = 0
while xss[i][0] in xss:
if xss[i][0] % 2 == 0:
result = result + xss [i][0]
while xss[0][j] in xss:
if xss[0][j] % 2 == 0:
result = result +xss[0][j]
i +=1
return result
ans = sum_even([4,8])
print (ans)
答案 0 :(得分:3)
您的代码存在多个问题。最简单的就是使用
sum
具有嵌套的条件生成器表达式:
def sum_even(xss):
return sum(x for sub_lst in xss for x in sub_lst if not x % 2)
嵌套for表达式的范围有时似乎是反直觉的。这大致相当于:
def sum_even(xss):
result = 0
for sub_lst in xss:
for x in sub_lst:
if not x % 2:
result += x
return result
对于任意嵌套的整数列表,您必须使用递归:
def sum_even(xss):
if isinstance(xss, int):
return (not xss % 2) * xss # the bool expr is neatly coerced to 1 or 0 ;)
return sum(sum_even(sub) for sub in xss)
答案 1 :(得分:3)
你可以试试这个:
import itertools
even_numbers = sum(i for i in itertools.chain.from_iterable(first_list) if i%2 == 0)
答案 2 :(得分:1)
你可以试试这个。它适用于任何维度列表(不仅仅是2):
ng -v
答案 3 :(得分:1)
>>> a=[[1,2],[3,4],[5,6]]
>>> reduce(lambda s,x:s+x,[i for l in a for i in l if not i%2],0)
12
没有itertools并只使用列表理解。
非常简单,感谢@ juanpa.arrivillaga,更简单的版本
>>> a=[[1,2],[3,4],[5,6,7,8]]
>>> sum([i for l in a for i in l if not i%2])
20
答案 4 :(得分:1)
具体而言,此错误表示您尝试使用list
,就好像它是sum_even
一样。
原因是您的第二个[4,8]
函数是为了处理2D列表而构建的,但您在一维列表([[4],[8]]
)上使用它而不是在2D列表上{{1 }})。
尽管如此,您的代码还有另一个错误:
def sum_even(xss):
result = 0
n = 0
i = 0
j = 0
while xss[i][0] in xss:
if xss[i][0] % 2 == 0:
result = result + xss [i][0]
while xss[0][j] in xss:
if xss[0][j] % 2 == 0:
result = result +xss[0][j]
i +=1
#there is no update for j
return result
在python中,for语句不要使用带迭代器的索引。结果更像是一个短语:
对于2D列表1d_list
中的每个xss
,请检查elements
。如果element
为偶数,请将其添加到result
。
def sum_even(xss):
result = 0
for 1d_list in xss:
for element in 1d_list:
if element%2 == 0:
result = result + element
return result
这样你就不会对列表的长度做出任何假设(每个1D子列表可能有不同的大小)。