繁体   English   中英

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

[英]Return element of one list based on true index of another

我有一个函数,用于返回条件为真的所有值的索引:

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_avg out是out = [[], [0], [1, 2]]或true,第二个列表的索引为0,最后一个列表的索引为2和3(第一个列表为空,因为什么都不是在里面)。

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

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 = [[], [], []]

任何有关如何解决此问题的建议都将不胜感激! 谢谢!

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

你的主循环可以填写out你已经做的。 然后,您可以使用列表推导在循环完成后创建相应的g列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM