三元表達式,列表解析和生成器表達式

三元表達式

在之前,在諸如比較兩個數大小的時候,一般的寫法都是下面的樣子javascript

if x > y:
    print("the max is x")
else:
    print("the max is y")

三元表達式的語法爲:java

True if expression else False

如今能夠個體三元表達式來完成這種比較簡單的判斷python

res = x if x > y else y
print(res)

列表解析

列表解析的語法格式爲mysql

[ i操做 for i in 列表 if 表達式1 and 表達式2]
  • 其中if判斷語句是可選語句,能夠對列表的元素進行操做

如今有這樣一個需求,把一個數字列表中的每一個值都取平方,把一個列表中的每一個字符串都轉換爲大寫形式linux

能夠這樣寫sql

l1 = range(1, 10, 2)
l2 = []
for i in l1:
    l2.append(i**2)

l3 = ['python', 'linux', 'javascript', 'mysql']
l4 = []
for j in l3:
    j = j.upper()
    l4.append(j)

print(l2)
print(l4)

那有沒有簡單的方式呢,能夠使用列表解析,上面的例子則能夠修改成express

l1 = range(1, 10, 2)
l2 = [i**2 for i in l1]

l3 = ['python', 'linux', 'javascript', 'mysql']
l4 = [j.upper() for j in l3]

print(l2)
print(l4)

生成器表達式

列表解析獲得的結果仍然是一個列表,列表解析的優勢是:取值方便 缺點:很佔系統資源,若是列表的長度較小時使用列表解析會很方便,可是若是列表的長度很大的時候,使用列表解析會佔用不少的內存資源,此時能夠使用生成器表達式來節省內存資源 來看下面的例子app

res = ( i**2 for i in range(100))
print(res)

獲得的結果爲spa

<generator object <genexpr> at 0x0000000002DA1AF0>

在上面的例子裏,把列表解析表達式中的中括號換成小括號,那麼表達式執行結果就變成了一個生成器code

咱們知道,生成器的本質就是迭代器,因此上面的表達式執行的結果生成器,能夠使用for 循環來取值

res = ( i**2 for i in range(100))

for i in res:
    print(i)
相關文章
相關標籤/搜索