[英]In python, when and how can you use for and if statements without colons or indentation?
這個問題特別是關於使用生成器語句,並且源於這個來自 Udacity 的計算機程序設計課程的程序:
旨在解決這個難題https://en.wikipedia.org/wiki/Zebra_Puzzle這個 img 可能更具可讀性http://imgur.com/klkaSry
import itertools
def zebra_puzzle():
houses = [first, _, middle, _,_] = [1,2,3,4,5]
orderings = list(itertools.permutations(houses))
return next((WATER, ZEBRA)
for (red, green, ivory, yellow, blue) in orderings
if im_right(green,ivory)
for (Englishman, Spaniard, Ukranian, Japanese, Norwegian) in orderings
if Englishman is red
if first is Norwegian
if nextto(Norwegian, blue)
for (dog, snails, fox, horse, ZEBRA) in orderings
if Spaniard is dog
for (coffee, tea, milk, oj, WATER) in orderings
if coffee is green
if Ukranian is tea
if middle is milk
for (OldGold, Kools, Chesterfields, LuckyStrike, Parliaments) in orderings
if OldGold is snails
if Kools is yellow
if nextto(Chesterfields, fox)
if nextto(Kools,horse)
if LuckyStrike is oj
if Parliaments is Japanese
)
def im_right(h1,h2):
return h1-h2 == 1
def nextto(h1,h2):
return abs(h1-h2) == 1
def main():
zebra_puzzle()
if __name__ == '__main__':
main()
我一直在 Project Euler 中遇到問題,這很有用,但我最終不得不使用普通的嵌套循環。
還有,這個問題好嗎?
這是一個生成器表達式語法。 它適用於多行的原因是因為他用 () 包裹了它(通常它寫在 1 行短語句中,以使語句更短更清晰)
你可以在這里看到更多細節
此語法的工作原理如下:
(one_value for one_value in my_list if one_value == 0)
第一個 one_value 是我們想要對列表中的每個元素執行的操作(因此我們可以執行類似 one_value+1 的操作來返回一個所有值都加 1 的列表)
比有一個“for one_value”,我們將每個元素稱為一個名稱
"in my_list" - 指定我們正在迭代的女巫列表
"if one_value ==0" - 將應用於列表中每個值的條件
if
可以用在你的例子中,在生成器表達式和列表推導中使用for
關鍵字。 對於前一種情況,請參閱“ comp_if
”的相關 Python 語法 BNF,對於后一種情況,請參閱“ list_if
” 。
您還可以在表達式中使用if
內聯。 它類似於 C 的三級運算符? :
? :
。
例如
a = <expression_foo> if <some_condition> else <expression_bar>
在這個語句中,條件<some_condition>
被評估,並確定哪個表達式的值被分配給a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.