根据另一个列表中元素的索引和最大值返回一个列表中的元素

时间:2016-08-15 10:58:48

标签: python numpy

我有一个列表,我将其转换为numpy数组:

lsts = ([[1,2,3], ['a','b','a']],
        [[4,5,6,7], ['a','a','b','b']], 
        [[1,2,3],['b','a','b']])

np_lsts = np.array(lsts)

我想返回第一个列表中第二个列表中出现'b'的最大元素。我想我必须使用索引但是卡住了!

即。我想在这种情况下返回(2,7,3)

5 个答案:

答案 0 :(得分:1)

那样做:

<md-tab>

在嵌套列表推导中使用zip()max()

答案 1 :(得分:1)

解决问题的一种可能方法:

lsts = ([[1, 2, 3], ['a', 'b', 'a']],
        [[4, 5, 6, 7], ['a', 'a', 'b', 'b']],
        [[1, 2, 3], ['b', 'a', 'b']],
        [[1, 2, 3], ['a']]
        )

result = []
for l in lsts:
    indices = [l[0][index] for index, v in enumerate(l[1]) if v == 'b']
    if indices:
        result.append(max(indices))

print result

答案 2 :(得分:1)

以下函数返回result列表。如果需要,您可以返回元组而不是列表。

def maxNum(lsts, character):
    result = []
    for entry in lsts:
        if character in entry[1]:
            result.append(max(entry[0]))
    return result

# lsts = ... # (put lsts here)

print maxNum(lsts, 'b')

答案 3 :(得分:0)

def get_max(l):
    first = True
    for e1, e2 in zip(l[0], l[1]):
        if e2 == 'b' and first:
            max = e1
            first = False
        elif e2 == 'b' and e1 > max:
            max = e1
    return max

result = ()
for l in lsts:
    if 'b' in l[1]:
        result += (get_max(l),)
print(result)

答案 4 :(得分:0)

如果子列表包含很多元素,这应该比当前解决方案更有效,因为它是在这些子列表上进行矢量化的:

import numpy_indexed as npi
results = [npi.group_by(k).max(v) for v,k in lsts]