【问题标题】:Filter values of list from list indexes从列表索引中过滤列表值
【发布时间】:2019-07-14 21:03:35
【问题描述】:

对于列表的列表,我编写了一个函数,该函数返回所写条件为真的索引:

samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]]

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]])
print (out)

输出: out = [[], [0], [1, 2]]

但是,我想为此列表添加函数,以从另一个列表返回真正索引处的元素。所以从上面的out,对于这样的列表:

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

我希望这个输出:

g = [[], ['meow'], ['woof', 'quack']]

为此,我已经写了:

samples_avg = [[1, 12, 3], [15000, 4, 3], [1, 144, 45]]
tracker = ['meow', 'woof', 'quack', 'where', 'what', 'who', 'dont', 'call', 'me']

def check(samples_avg, tracker):

out = [[] for _ in samples_avg]
g = [[] for _ in out]
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 = [[t for i in o] for t, o in zip(tracker, out)]
print (out)
print (g)

但是,这会返回:

g = [[], ['woof'], ['quack', 'quack']]

我该如何解决这个问题?任何建议将不胜感激!

【问题讨论】:

  • 当心:您正在修改一个列表,然后您将对其进行迭代。不要那样做:out[m[1]].extend([m[2]])

标签: python list indexing


【解决方案1】:

为此,您只需要如下所示的列表理解。

out = [[], [0], [1, 2]]
tracker = ['meow', 'woof', 'quack', 'where', 'what', 'who', 'dont', 'call', 'me']

[[tracker[i] for i in arr] for arr in out]

结果:

[[], ['meow'], ['woof', 'quack']]

您可能希望在函数中的 if 语句之外使用它。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 2012-08-04
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2017-08-26
    相关资源
    最近更新 更多