![](/img/trans.png)
[英]returning the element in one list based on the index and maximum value of an element in another list
[英]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.