簡體   English   中英

嵌套 ifs 中的列表理解

[英]List comprehension in nested ifs

我是一個新手,試圖了解 python 中的列表理解。我的問題與其他帖子不同。

我被要求編寫列表理解代碼以獲得以下 output:

從 1 到 30(包括兩者)的所有奇數。 那些是 5 的倍數的將標有“x”。

[1, 3, '5x', 7, 9, 11, 13, '15x', 17, 19, 21, 23, '25x', 27, 29]

為此,我嘗試使用正常的 for 和 if 方法來獲取它。 這是我的解決方案並且有效:

odds = []

for i in list(range(1,30+1)):
  if i%2 !=0:
    odds.append(i)
    if i%5 == 0:
      odds.append(f'{i}x')
      odds.remove(i)

print(odds)

在圖像中,您可以找到我失敗的列表理解嘗試。 我需要一些光來正確放置 rest 的東西。

謝謝!

在此處輸入圖像描述

您不能單獨使用列表理解在一行中解決這個問題。 您需要三元運算符(括在括號中)。

[(n if n%5 else f'{n}x') for n in range(1,31) if n%2]

如果您不關心項目的順序,則可以通過連接兩個列表理解產生的列表來避免需要三元運算符( 條件表達式),例如

[n for n in range(1,31,2) if n%5 != 0] + [f'{n}x' for n in range(1,31,2) if n%5 == 0]

...產生:

[1, 3, 7, 9, 11, 13, 17, 19, 21, 23, 27, 29, '5x', '15x', '25x']

或者,冒着使它看起來像代碼高爾夫的風險:

[[f'{n}x',n][min(n%5,1)] for n in range(1,31,2)]

... 產生:

[1, 3, '5x', 7, 9, 11, 13, '15x', 17, 19, 21, 23, '25x', 27, 29]

我使用表達式min(n%5,1)來索引列表[f'{n}x',n] ,因此 select 列表中的項目 0 或項目 1,具體取決於n是否可以被 5 整除or not - 也不使用條件表達式

替代解決方法:

numlist = [(i,f'{i}x')[not i%5] for i in range(31) if i%2]
print(numlist)
# [1, 3, '5x', 7, 9, 11, 13, '15x', 17, 19, 21, 23, '25x', 27, 29]

暫無
暫無

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

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