如何在保持顺序的情况下将多个列表划分在一起?

How to divide several lists together while maintaining order?

我正在尝试创建一个三列表(一个包含蓝色变化的平均值,另一个包含绿色通道,最后一个包含红色通道)。但是,我无法将这三个列表放在一起。

这是我想要实现的一个小例子

a = [4,2,2,3]
b = [4,2,1,4]
c = [3,2,1,2]
result = [(4/4/3), (2/2/2), (2/1/1), (3/4/2)]

但这是代码:

c_1 = [img2[92, 72]]
c_2 = [img2[260,76]]
c_3 = [img2[422,79]]
c_All = [img2[92, 72],img2[260,76],img2[422,79]]

bAvgWells = []
gAvgWells = []
rAvgWells = [] 

for center in c_All:
    b = img2[center[0]-22: center[0]+22, center[1]-26: center[1]+26, 0]
    g = img2[center[0]-22: center[0]+22, center[1]-26: center[1]+26, 1]
    r = img2[center[0]-22: center[0]+22, center[1]-26: center[1]+26, 2]
    bAvg = np.mean(b)
    gAvg = np.mean(g)
    rAvg = np.mean(r)
    #Add each value from loop into list in line 54-56
    bAvgWells.append(bAvg)
    gAvgWells.append(gAvg)
    rAvgWells.append(rAvg)

avg_one = []
color_avg = []
end_b = len(bAvgWells)
end_f = len(avg_one)
#Divdes the list together for averages of all columns
for i in range(end_b):
    a = (bAvgWells[i]/gAvgWells[i])
    avg_one.append(a)
for k in range(end_f):
    b = (a[i]/rAvgWells[i])
    color_avg.append(b)
print (color_avg)

错误:"Mean of empty slice"

这需要一种功能性方法:

>>> from functools import reduce, partial
>>> import operator
>>> a = [4,2,2,3]
>>> b = [4,2,1,4]
>>> c = [3,2,1,2]
>>> list(map(partial(reduce, operator.truediv), zip(a, b, c)))
[0.3333333333333333, 0.5, 2.0, 0.375]

或者使用列表理解来表达同样的事情:

>>> [reduce(operator.truediv, z) for z in zip(a, b, c)]
>>> results = zip(a, b, c)
[(4, 4, 3), (2, 2, 2), (2, 1, 1), (3, 4, 2)]
>>> import numpy as np
>>> [np.mean(sequence) for sequence in results]
[3.6666666666666665, 2.0, 1.3333333333333333, 3.0]

或者,

>>> map(np.mean, zip(a, b, c))

作为命名函数:

import numpy as np

def find_averages(*inputs):
    return [np.mean(sequence) for sequence in zip(*inputs)]

print find_averages(a, b, c)

示例输出:

[3.6666666666666665, 2.0, 1.3333333333333333, 3.0]