簡體   English   中英

檢查嵌套列表中的所有元素在 python 中是正還是負

[英]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 循環。 以下是優化的兩個重要規則(正如我的大學導師告訴我的):

  1. 不要優化
  2. 還沒優化

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM