如何在Python的列表列表中返回第一个非负列表的索引?

时间:2018-08-31 17:37:40

标签: python

所需的输出是第一个非负列表的索引。

说我嵌套了如下的数字列表。我试图弄清楚如何删除否定列表的值,或者只返回列表中所有值均为正的索引。

我的想法是枚举或循环一个函数,该函数检查列表是否具有负值,然后从列表列表中弹出或删除

还是我使用列表推导?

# pseudocode
x = [[-1, -2, -1], [-1, -3, -1], [1, 2, 2]]
index_x = [x.index(non_negative(x)) for x in data]
print(index_x)
# 2 

3 个答案:

答案 0 :(得分:5)

您可以将std::unique_ptr与一个生成器表达式一起使用,并可以将next + enumerate一起使用。您的逻辑等同于查找包含所有非负值的第一个子列表的索引。

all

仅当您希望为符合条件的 all 子列表提取索引时,列表理解才有用。内置的x = [[-1, -2, -1], [-1, -3, -1], [1, 2, 2]] res = next((idx for idx, sub in enumerate(x) if all(i >= 0 for i in sub)), None) # 2 函数从可迭代对象中检索第一个值。如果未找到子列表,则将返回指定的next

答案 1 :(得分:0)

为什么不做这样的事情?只需遍历列表即可。

from functools import reduce

x = [[-1, -2, -1], [-1, -3, -1], [1, 2, 2]]

for index, sublist in enumerate(x):
    if reduce(lambda a, b: a >= 0 and b >= 0, sublist):
        print(index)
        break

答案 2 :(得分:0)

为此,我只使用一个具有较早返回的函数,我觉得这使“发现后停止查找”的意图更加明确:

def first_non_negative(lsts):
    for idx, lst in enumerate(lsts):
        if all(it > 0 for it in lst): 
            return idx