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

问题描述 投票:0回答:2

我试图使用一个列表理解来寻找元素都是正值的嵌套列表,但我不知道如何措辞条件来检查嵌套列表中的所有值,以便列表理解。

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

我想这是我想变成代码的语句。"if all n > 0 for n in i, return index i."

编辑:输出将是返回所有正数对应行的指数

python nested-lists
2个回答
2
投票

你已经很接近了。想象一下,你将如何在循环中做这件事。

for index, row in enumerate(records):
    if all(col > 0 for col in row): 
        print(index)

循环中的... if 状况 all 如果所有元素都是正值,则返回True。现在把这个放到列表压缩的形式中。

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

列表理解是for循环的优化版本,专门用于创建列表。在生成列表的循环和列表理解之间通常有一个一对一的翻译。当你被列表编译语法卡住的时候,我的建议是退一步,把这看起来像一个简单的for循环。这里有两个重要的优化规则(大学时导师告诉我的)。

  1. 不要优化
  2. 还没有优化

1
投票

您可以使用 all 来检查所有的元素是否满足给定的条件,如

answer = [all(n > 0 for n in lst) for lst in records]

1
投票

你可以使用 all 内置方法

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

  • 对于所有负数

    answer = [all(n < 0 for n in i) for i in records] # [False, False, False, False, False]
    
  • 对于所有正数

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

要获得索引的 全正行,结合 enumerate

answer = [idx for idx,row in enumerate(records) if all(n > 0 for n in row)] # [2]
© www.soinside.com 2019 - 2024. All rights reserved.