在这样的列表列表中计算奇数的最短方法是什么,这个列表具有任意维度,不一定是5x5:
list_of_lists = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
我试过,但我猜它有更短的时间:
counter = 0
for row in list_of_lists:
for i in row:
if i % 2 != 0:
counter += 1
print(counter)
答案 0 :(得分:4)
如果你在主列表中总是有一个级别的平面列表,你可以使用内部循环来展平,对每个i % 2
的结果求和,奇数为0,偶数为0:
list_of_lists = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
print(sum(i % 2 for sub in list_of_lists for i in sub))
或使用itertools.chain
进行展平:
from itertools import chain
print(sum(i % 2 for i in chain(*list_of_lists)))
如果您有任意嵌套,递归将是解决问题的简单方法:
def flat(lst):
for i in lst:
if isinstance(i, list):
for j in flat(i):
yield j % 2
else:
yield i % 2
print(sum(flat(list_of_lists)))
答案 1 :(得分:1)
计算对比度的numpy方式:
import numpy as np
list_of_lists = [[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
l = np.array(list_of_lists)
print len(l[l%2!=0])
l[l%2!=0]
返回满足条件l%2!=0
和len()
的所有元素。
PS:这当然假设list_of_lists是矩形的。对于每个内部列表允许不同长度的解决方案,请参阅Padraic的答案。