簡體   English   中英

單行python中的if-else句子

[英]if-else sentence in one-line-python

我有一些代碼:

a_part = [2001, 12000]
b_part = [1001, 2000]
c_part = [11, 1000]
d_part = [1, 10]
data = range(1, 12000)
labels = [a_part, b_part, c_part, d_part]
sizes = []

# ---

for part in labels:
    sum = 0
    for each in data:
        sum += each if each >= part[0] and each <= part[1] else 0
        # error
        # sum += each if each >= part[0] and each <= part[1] 
    sizes.append(sum)
print(sizes)

我改寫了它,使其更具Python風格:

sizes = [sum(x for x in data if low<=x<=high) for low,high in labels]
# error
# sizes = [sum(x for x in data if low<=x<=high else 0) for low else 0,high in labels]
print(sizes)

我發現在第一個代碼段中我不能遺漏else 0而在第二個示例中我不能包含else 0

這些示例之間的else 0區別是else 0

您在這里有兩個非常不同的事情。

首先,您有一個表達式,並在使用條件表達式來產生值。 這需要一個else因為一個表達式總是需要產生一些東西

例如,如果您寫了:

sum += each if each >= part[0] and each <= part[1]  # removing "else 0"

那么如果測試為假,將加到總和上呢?

在第二個中,您有一個生成器表達式 ,而if是可能部分的一部分( 在語法中稱為comp_if ), 位於 (嵌套) for循環旁邊。 就像if ...:語句一樣,它過濾序列中使用了哪些元素,並且在錯誤的情況下不需要產生值。 您將不會進行其他過濾。

讓我們回到您的示例:

sum(x for x in data if low<=x<=high)

if測試為假,則x將從循環中省略並且不求和。 您將在第一個示例中執行相同的操作:

if each >= part[0] and each <= part[1]:
    # only add to `sum` if true
    sum += each

這根本不是相同的語法。 第一個是三元運算符(類似於C中的(a?b:c))。 在這里沒有else子句沒有任何意義。 第二個是列表理解,if子句的目的是過濾可迭代的元素。

x if y else z

這是一個內聯if表達式,它返回一個值。 它必須始終返回值,不能返回值,因此它必須包含else子句。

[x for x in y if z]

這是一個列表理解。 這里的if充當循環的過濾器。 等效for x in y: if z: ...

要在其中放置else ,可以將inline-if表達式替換為x

[x if y else z for foo in bar]

暫無
暫無

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

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