我试图使用一个列表理解来寻找元素都是正值的嵌套列表,但我不知道如何措辞条件来检查嵌套列表中的所有值,以便列表理解。
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."
编辑:输出将是返回所有正数对应行的指数
你已经很接近了。想象一下,你将如何在循环中做这件事。
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循环。这里有两个重要的优化规则(大学时导师告诉我的)。
您可以使用 all
来检查所有的元素是否满足给定的条件,如
answer = [all(n > 0 for n in lst) for lst in records]
你可以使用 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]