我有一个函数,该函数返回所有符合条件的值的索引:
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 = [[], [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 = [[], [], []]
任何有关如何解决此问题的建议,将使其按预期返回值,将不胜感激!谢谢!
答案 0 :(得分:0)
您正在使它变得比所需的复杂。
您的主循环可以像已经完成的那样填写out
。然后,您可以使用列表理解功能在循环完成后创建相应的g
列表。
g = [[t[i] for i in o] for t, o in zip(tracker, out)]