python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式
python中三元表達式的語法如下 ===if else
result = x if condition else y
另外一種三元表達式,比較少見
result = (x, y)[condition]
列表推導式? ==〉循環
python中列表推導式用于使用其他列表創建一個新列表。
其基本形式為: [表達式?for?變量?in?列表]
list_1_10 = [x**2 for x in range(1,11)]print(list_1_10)
列表推導式結合三元表達式
example2 = [[1,2,3],[4,5,6],[7,8,9],[10]]
exmaple5= [j**2 for i in example2 if len(i)>1 for j in i if j%2 ==0]print(exmaple5)
生成器推導式
Python生成器推導式:
生成器推導式(generator expression)的用法與列表推導式非常相似,在形式上生成器推導式使用圓括號(parentheses)作為定界符,而不是列表推導式所使用的方括號(square
brackets)。
與列表推導式最大的不同是,生成器推導式的結果是一個生成器對象。生成器對象類似于迭代器對象,具有惰性求值的特點,只在需要時生成新元素,比列表推導式具有更高的效率,空間占用非常少,尤其適合大數據處理的場合。
使用生成器對象的元素時,可以根據需要將其轉化為列表或元組,也可以使用生成器對象的next()方法或者內置函數next()進行遍歷,或者直接使用for循環來遍歷其中的元素。但是不管用哪種方法訪問其元素,只能從前往后正向訪問每個元素,沒有任何方法可以再次訪問已訪問過的元素,也不支持使用下標訪問其中的元素。當所有元素訪問結束以后,如果需要重新訪問其中的元素,必須重新創建該生成器對象,enumerate、filter、map、zip等其他迭代器對象也具有同樣的特點。
g = (i for i in range(199))print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())
舉例:
字典推導式
>>> s = {x:x.strip() for x in ('? he? ', 'she??? ', '??? I')} ?? #輸出形式形如:x+:+strip處理過后的x
>>> s
{'? he? ': 'he', 'she??? ': 'she', '??? I': 'I'}
>>> for k, v in s.items():
print(k, ':', v)
he?? : he
she???? : she
I : I
#Python strip() 方法用于移除字符串頭尾指定的字符(默認為空格)。str.strip('0')的意思即使刪除str字符串首尾出現的字符‘0’
字典推動式通過{key:value+表達式}的方式生成一個字典
>>> {i:str(i) for i in range(1, 5)}
{1: '1', 2: '2', 3: '3', 4: '4'} ?? #由range對象i和i轉化成的字符串組成的字典
>>> x = ['A', 'B', 'C', 'D']
>>> y = ['a', 'b', 'b', 'd']
>>> {i:j for i,j in zip(x,y)} ?? #通過zip對象+兩個字符型列表組成字典
{'A': 'a', 'B': 'b', 'C': 'b', 'D': 'd'}
Python 中,使用集合推導式可以借助列表、元組、字典、集合以及 range 區間,快速生成符合需求的集合。
集合推導式的語法格式和字典推導式完全相同,如下所示:
{ 表達式 for 迭代變量 in 可迭代對象 [if 條件表達式] }
其中,用 [] 括起來的部分,可以使用,也可以省略。
有讀者可能會問,集合推導式和字典推導式的格式完全相同,那么給定一個類似的推導式,如何判斷是哪種推導式呢?最簡單直接的方式,就是根據表達式進行判斷,如果表達式以鍵值對(key:value)的形式,則證明此推導式是字典推導式;反之,則是集合推導式。
【例 1】
setnew = {i**2 for i in range(3)}
print(setnew)
運行結果為:
{0, 1, 4}
【例 2】既然生成的是集合,那么其保存的元素必須是唯一的。
tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)
運行結果為:
{16, 4, 36}
【例 3】
dictdemo = {'1':1,'2':2,'3':3}
setnew = {x for x in dictdemo.keys()}
print(setnew)
運行結果為:
{'2', '1', '3'}
總結
以上是生活随笔為你收集整理的python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php新闻删除功能设计,php原生开发新
- 下一篇: python剑指offer面试题_剑指o