按对象列表中的每个元素索引查找最小值

2024-04-25 07:38:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面有一个对象实例,它有pid和pos列表,元素的范围是3-10,现在我将使用三个元素。你知道吗

lst = []

class Ppl:
    def __init__(self, pid):
        # local variables
        self.pid = pid
        self.pos = [3*pid+6, 1, 10+pid-4*pid] 

for index in range(3):        
    lst.append(Ppl(index))

for index in range(len(lst)):
    print(lst[index].pos)

结果是:

[6, 1, 10]
[9, 1, 7]
[12, 1, 4]

我需要一种方法,通过每个索引获得这三个的最小值,并进行列表理解,以便预期输出应该是:

[6, 1, 4]

到目前为止我试过的:

我尝试过这种方法,但实际上这不是一种好方法,因为只有当list对象和'pos'list元素只有三个时,这种方法才会起作用。你知道吗

lst2 = []
for index in range(len(lst)):   
    rst = min(lst[0].pos[index],lst[1].pos[index],lst[2].pos[index])
    lst2.append(rst)
print(lst2) 
>> [6, 1, 4]

另一种只在列表不是对象实例时有效的方法。。。但这不是我想要的方式。你知道吗

lst3 = [[6, 1, 10], [9, 1, 7], [12, 1, 4]]  

lst3 = list(map(min, *lst3))
print(lst3)
>> [6, 1, 4]

那怎么做呢?你知道吗


Tags: 对象方法inposself元素列表for
3条回答

你可以这样做:

lst[]
n = 5
for index in range(n):        
    lst.append(Ppl(index))

result = list(map(min, *[x.pos for x in lst]))

下面是一种处理现有列表的方法,如您所示,其中每个列表可以是任意长度的,只要所有内部列表的长度相同:

from functools import reduce

data =  [[6, 1, 10],
        [9, 1, 7],
        [12, 1, 4]]

mins = []

len = len(data[0])
for i in range(len):
    mins.append(reduce((lambda x, y: [min(x[i], y[i])] * len), data)[0])

print mins

结果:

[6, 1, 4]

您可以只在类的第一个实例的数组中找到元素的数量(每个实例的位置数组中必须有相同数量的元素)

lst2 = []

numOfObjects = len(lst) #number of instances of the class 'Ppl'

numElements = len(lst[0].pos) #number of elements in array of EACH class instance

for index in range(numElements):

    rst = min([lst[i].pos[index] for i in range(numOfObjects)])
    lst2.append(rst)

print (lst2)

相关问题 更多 >