如何在保持顺序的情况下将多个列表划分在一起?
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]
我正在尝试创建一个三列表(一个包含蓝色变化的平均值,另一个包含绿色通道,最后一个包含红色通道)。但是,我无法将这三个列表放在一起。
这是我想要实现的一个小例子
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]