一个列表的返回元素基于另一个列表的真实索引

时间:2019-07-14 02:02:17

标签: python list indexing

我有一个函数,该函数返回所有符合条件的值的索引:

def check(samples_avg):
    out = [[] for _ in samples_avg]
    for indx, v in enumerate(zip(*samples_avg)):
        m = max((val, i, indx) for i, val in enumerate(v))
        if all(val * 5 < m[0] for i, val in enumerate(v) if i != m[1]):
            out[m[1]].extend([m[2]])
    print (out)

所以输入:samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]] 函数返回out = [[], [0], [1, 2]]

但是,我想为此功能添加功能,以返回另一个列表中的元素,该列表位于所分析的第一个列表中的真实索引处。例如,对于此列表:

tracker = [['meow', 'woof', 'quack'], ['where', 'what', 'who'], ['dont', 'call', 'me']]

我希望输出如下:

[[], ['where'], ['call', 'me']]

因为samples_avgout = [[], [0], [1, 2]],或者在第二个列表的索引0和最后一个列表的索引2和3处为true(第一个列表为空,因为其中没有内容)。

为此,我将函数重写为如下形式:

def check(samples_avg, tracker):
    out = [[] for _ in samples_avg]
    for indx, v in enumerate(zip(*samples_avg)):
        m = max((val, i, indx) for i, val in enumerate(v))
        if all(val * 5 < m[0] for i, val in enumerate(v) if i != m[1]):
            out[m[1]].extend([m[2]])

            g = [[] for _ in out]
            for f in enumerate(zip(*out)):
               g.append[enumerate(zip(out[f], tracker))]
    print (out)
    print (g)

但是,这只会返回

 out = [[], [0], [1, 2]] 
 g = [[], [], []]

任何有关如何解决此问题的建议,将使其按预期返回值,将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使它变得比所需的复杂。

您的主循环可以像已经完成的那样填写out。然后,您可以使用列表理解功能在循环完成后创建相应的g列表。

g = [[t[i] for i in o] for t, o in zip(tracker, out)]