在python中检查嵌套列表中的所有元素是正的还是负的

在python中检查嵌套列表中的所有元素是正的还是负的,python,nested-lists,Python,Nested Lists,我试图使用列表理解来查找元素都为正的嵌套列表,但我不确定如何使用条件语句来检查嵌套列表中的所有值以进行列表理解 records = [[-167.57, 4.0, 61.875, -100.425], [-1.75, 3.75, 4.0], [7612.875, 10100.0, 74.25, 1.75, 61.875], [-2333.37, -5404.547500000001, -5178.645833333333, 97.0, 167.57], [-96.999999999999

我试图使用列表理解来查找元素都为正的嵌套列表,但我不确定如何使用条件语句来检查嵌套列表中的所有值以进行列表理解

records = [[-167.57, 4.0, 61.875, -100.425],
 [-1.75, 3.75, 4.0],
 [7612.875, 10100.0, 74.25, 1.75, 61.875],
 [-2333.37, -5404.547500000001, -5178.645833333333, 97.0, 167.57],
 [-96.99999999999997, -5277.999999999999, -4998.5, 74.25, 3.75]]

answer = [i for i in records if (n < 0 for n in i)]
answer
records=[-167.57,4.0,61.875,-100.425],
[-1.75, 3.75, 4.0],
[7612.875, 10100.0, 74.25, 1.75, 61.875],
[-2333.37, -5404.547500000001, -5178.645833333333, 97.0, 167.57],
[-96.99999999999997, -5277.999999999999, -4998.5, 74.25, 3.75]]
答案=[i表示记录中的i,如果(n<0表示记录中的n)]
答复
我想这就是我试图转换成代码的语句:“如果I中n的所有n>0,则返回索引I”


编辑:输出将返回所有正数对应行的索引。您可以使用
all
检查所有元素是否满足给定条件,例如

answer = [all(n > 0 for n in lst) for lst in records]
您可以使用

如果iterable的所有元素都为True(或iterable为空),则返回True

  • 对所有负面的

    answer = [all(n < 0 for n in i) for i in records] # [False, False, False, False, False]
    

要获取所有正行的索引,请与
enumerate

answer = [idx for idx,row in enumerate(records) if all(n > 0 for n in row)] # [2]

你很接近。想象一下,您将如何在循环中执行此操作:

for index, row in enumerate(records):
    if all(col > 0 for col in row): 
        print(index)
如果所有元素仅为正,则带有
all
if
条件返回True。现在将其放入列表压缩表中:

answer = [
    index 
    for index, row in enumerate(records) 
    if all(col > 0 for col in row)
]
# [2]

列表理解是为创建列表而专门设计的for循环的优化版本。在生成列表的循环和列表理解之间通常存在一对一的转换。我的建议是,当您陷入列表comp语法时,请后退一步,并将其可视化为一个简单的for循环。以下是优化的两条重要规则(正如我大学导师告诉我的):

  • 不要优化
  • 还没有优化

  • 预期的产出究竟是多少?坐第一排?所有的行?找出是否存在这样的行?输出将返回所有正数对应行的索引谢谢,您能在问题中说明这一点吗
    answer = [
        index 
        for index, row in enumerate(records) 
        if all(col > 0 for col in row)
    ]
    # [2]