[英]Check if all elements in nested list are positive or negative in python
我正在嘗試使用列表推導來查找其元素均為正數的嵌套列表,但我不確定如何用條件語句檢查嵌套列表中的所有值以進行列表推導。
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
我認為這是我試圖將其轉換為代碼的語句:“如果 i 中的 n 的所有 n > 0,則返回索引 i”
編輯: Output 將返回所有正數對應行的索引
你很親密。 想象一下您將如何循環執行此操作:
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
內置方法
如果可迭代對象的所有元素都為真(或可迭代對象為空),則返回 True
對於所有負面的
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.