所需的输出是第一个非负列表的索引。
说我嵌套了如下的数字列表。我试图弄清楚如何删除否定列表的值,或者只返回列表中所有值均为正的索引。
我的想法是枚举或循环一个函数,该函数检查列表是否具有负值,然后从列表列表中弹出或删除
还是我使用列表推导?
# 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
答案 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