Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何返回列表列表中第一个非负列表的索引?_Python - Fatal编程技术网

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

在Python中,如何返回列表列表中第一个非负列表的索引?,python,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 您可以将

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

假设我嵌套了一个数字列表,如下所示。我试图找出如何删除负数列表的值,或者只是返回列表中所有值都为正数的索引

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

还是使用列表理解

# 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 

您可以将
next
与生成器表达式一起使用,并
enumerate
+
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
函数从iterable中检索第一个值。如果未找到子列表,则将返回指定的
None

为什么不这样做?只需反复浏览列表

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

为此,我只使用了一个带有提前返回的函数,我觉得这使“发现此问题时停止查找”的意图更加清晰:


第一个非负列表的索引在给定的子列表中是否也有正负值的混合?在我的情况下,没有出现这种混合,但我可能需要注意。如果没有混合,那么您可以执行
index_x=[I for I,j in enumerate(x)If sum(j)>0]
def first_non_negative(lsts):
    for idx, lst in enumerate(lsts):
        if all(it > 0 for it in lst): 
            return idx