如何编写一个函数,该函数返回矩阵1的偶数列中的所有数字中的最大元素,即第0,第2,第4等列中所有元素中的最大元素。前提条件:matrix1是一个矩阵,其中包含至少有1行和1列的数字。
预期结果如下:
>>> maximum_among_all_even_columns([[1,1,1,1,1,1,1],[1,10,3,20,12,6,0]])
12
这是我尝试过的尝试:
ncols=len(m[0])
nrows=len(m)
sums=[]
for j in range(ncols):
col_sum=0
for i in range(nrows):
if i==0 or i%2 == 0:
sums.append(m[i][j])
maxf= max(sums)
return maxf
答案 0 :(得分:2)
l = [[1,1,1,1,1,1,1],[1,10,3,20,12,6,0]]
print max( sum( map(list, zip(*l)[::2]) , []) )
注意:这只能在Python 2.x
中运行我按照以下方式构建了这个:
zip(*l)
[(1, 1), (1, 10), (1, 3), (1, 20), (1, 12), (1, 6), (1, 0)]
zip(*l)[::2]
[(1, 1), (1, 3), (1, 12), (1, 0)]
map( list,zip(*l)[::2] )
[[1, 1], [1, 3], [1, 12], [1, 0]]
sum( map(list, zip(*l)[::2]) , [])
[1, 1, 1, 3, 1, 12, 1, 0]
最后
max( sum( map(list, zip(*l)[::2]) , []) )
12
答案 1 :(得分:2)
如果要返回偶数列的最大值:
import random
n = 10
m = 10
matrix = [[random.randint(0,100) for i in range(n)] for j in range(m)]
溶胶。 1:
%%timeit
max([element for row in matrix for col, element in enumerate(row) if col%2 == 0])
10000次循环,最佳3:每循环19.3μs
溶胶。 2:
%%timeit
res = max([row[i] for row in matrix for i in range(0,len(row),2)])
100000次循环,最佳3:每循环7.91μs
溶胶。 3:
%%timeit
res = max([element for row in matrix for element in row[::2]])
100000次循环,最佳3:每循环4.92μs
溶胶。 4:
%%timeit
res = matrix[0][0]
for j in range(len(matrix[0])//2):
for i in range(len(matrix)):
if matrix[i][2*j] > res:
res = matrix[i][2*j]
100000个循环,最佳3:每个循环8.28μs
溶胶。 5:
%%timeit
max([max(e) for e in [col for col in zip(*matrix)][::2]])
100000个循环,最佳3:每循环4.48μs
解决方案5(使用zip()
)略胜一筹。
测试双Intel(R)Xeon(R)CPU E5-2630 v3 @ 2.40GHz(32核)和Python 3.5.2 :: Anaconda自定义(64位)
<强>更新强>
添加时间......
更新2
解决方案切片。
更新3
我添加了一些代码来生成矩阵,将zip()
解决方案'翻译'到Python3并使用矩阵10 * 10测试解决方案。我把所有的解决方案放在一起。
答案 2 :(得分:1)
这很简单,我认为不需要太多解释。 困难可能是我们习惯于在线上迭代然后在列上进行迭代,但在这里它是相反的。
https://graph.microsoft.com/v1.0/me/drive/sharedWithMe?$filter=remoteItem/createdBy/user/displayName eq '{DISPLAY_NAME}'
编辑:将maxValue = matrix[0][0]
for j in range(len(matrix[0])//2) :
for i in range(len(matrix)) :
if matrix[i][2*j] > maxValue :
maxValue = matrix[i][2*j]
更改为max
,以便不会覆盖maxValue
内置函数。