Python中带有条件的列表的平均值 list=[[159.2213、222.2223、101.2122] [359.2222, 22.2210, 301.2144]] 如果列表[1][0]

Python中带有条件的列表的平均值 list=[[159.2213、222.2223、101.2122] [359.2222, 22.2210, 301.2144]] 如果列表[1][0],python,if-statement,mean,Python,If Statement,Mean,你好!!我想对每一列执行此操作,并将结果输出到另一个列表中。Fix 您可以循环迭代存在的列数 list = [[159.2213, 222.2223, 101.2122] [359.2222, 22.2210, 301.2144]] if list[1][0] < list[0][0]: avg = (list[1][0] + list[0][0] - 200)/2 else: avg = (list[1][0] + list[0][0] + 200)/2

你好!!我想对每一列执行此操作,并将结果输出到另一个列表中。

Fix 您可以循环迭代存在的列数

list = [[159.2213, 222.2223, 101.2122]
        [359.2222, 22.2210, 301.2144]]

if list[1][0] < list[0][0]:
    avg = (list[1][0] + list[0][0] - 200)/2
else:
    avg = (list[1][0] + list[0][0] + 200)/2

与numpy搭配最佳 简单的语法和最佳的性能

avgs = []
for first_row, second_row in zip(*values):
    factor = -1 if second_row < first_row else 1
    avgs.append((first_row + second_row + (200 * factor)) / 2)
将numpy导入为np
values=np.array(值)
res=值。总和(轴=0)/2
res+=np.其中(值[1]<值[0],-100100)
lis=[[159.2213、222.2223、101.2122],
[359.2222, 22.2210, 301.2144]]
res=[]
对于范围内的i(len(lis[0]):
如果lis[1][i]

这应该是可行的,但是使用numpy将是解决此类问题的更好方法。

您可以这样做:

lis = [[159.2213, 222.2223, 101.2122],
        [359.2222, 22.2210, 301.2144]]
res = []
for i in range(len(lis[0])):
    if lis[1][i] < lis[0][i]:
        res.append((lis[1][i] + lis[0][i] - 200)/2)
    else:
        res.append((lis[1][i] + lis[0][i] + 200)/2)
list = [[159.2213, 222.2223, 101.2122]
        [359.2222, 22.2210, 301.2144]]

results = []

for x,y in zip(list[0],list[1]):
    if y < x:
        avg = (y + x - 200)/2
    else:
        avg = (y + x + 200)/2  
    results.append(avg)  
list=[[159.2213、222.2223、101.2122]
[359.2222, 22.2210, 301.2144]]
结果=[]
对于zip中的x,y(列表[0],列表[1]):
如果y
列表理解如下所示:

lis = [[159.2213, 222.2223, 101.2122],
        [359.2222, 22.2210, 301.2144]]
res = []
for i in range(len(lis[0])):
    if lis[1][i] < lis[0][i]:
        res.append((lis[1][i] + lis[0][i] - 200)/2)
    else:
        res.append((lis[1][i] + lis[0][i] + 200)/2)
list = [[159.2213, 222.2223, 101.2122]
        [359.2222, 22.2210, 301.2144]]

results = []

for x,y in zip(list[0],list[1]):
    if y < x:
        avg = (y + x - 200)/2
    else:
        avg = (y + x + 200)/2  
    results.append(avg)  

我猜第一行末尾缺少一个。请查看
numpy
,因为“列”操作比使用列表更容易。
avg = [(x + y + (200 if x <= y else -200)) / 2 for x, y in zip(*lst)]
arr = np.array(lst)
avg = 0.5 * (arr.sum(axis=0) + np.copysign(200, np.diff(arr, axis=0)))