簡體   English   中英

在清單推導中使用OR

[英]Using OR in List Comprehension

對於我的一生,我不知道為什么這行不通。 我正在嘗試獲取列表的總和,但是,如果列表包含值13,則該值應從總和中排除,因此以下值也應從列表中排除。 例如, [1,13,3]為1, [13,2,5]為5。

我一直在嘗試此列表理解:

lst = [3,3,13]
sum([lst[i] for i in range(len(lst)) if not lst[i] == 13 or not lst[i-1] == 13])

手術室似乎不像我期望的那樣工作。 如果我刪除了OR語句的任何一部分,它將完全按照應有的方式工作。

>>> lst = [3,3,13]
>>> [lst[i] for i in range(0,3) if not lst[i] == 13]
[3, 3]
>>> [lst[i] for i in range(len(lst)) if not lst[i] == 13 or not lst[i-1] == 13]
[3, 3, 13]

您的代碼中有兩個錯誤。

  1. 如果最后一個元素為13,則第一個元素不添加,因為lst[0-1] == 13由於Python的索引環繞)。
  2. 如評論和其他答案中所述,您應該使用and ,而不是or 這是因為戴摩根的法律

然后,生成的代碼是

sum([lst[i] for i in range(len(lst)) if not lst[i] == 13 and not(i > 0 and lst[i-1] == 13)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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