天天看點

清單推導式,元組推導式,字典推導式,集合推導式使用Python進階——推導式

Python進階——推導式

什麼是推導式

  • 推導式是python中建立和使用序列的簡潔方式。
  • 推導對象主要包括清單list,元組tuple,字典dict,集合set,字元串string。

清單推導式的具體用法

生成1,2,3,4,5…序列對應每個數的平方的新清單
  • 沒有清單推導式支援的情況下
myList = []
for num in range(1, 6):
    myList.append(num ** 2)
print(myList)  
# result:[1, 4, 9, 16, 25]
           
  • 清單推導式方法
myList = [num ** 2 for num in range(1, 6)]
print(myList)   
# result:[1, 4, 9, 16, 25]
           
生成1,2,3,4,5…序列中為偶數的平方的新清單
  • 沒有清單推導式支援的情況下
myList = []
for num in range(1, 6):
    if num % 2 == 0:
        myList.append(num ** 2)
print(myList)  # result:[4, 16]
           
  • 清單推導式方法
myList = [num ** 2 for num in range(1, 6) if num % 2 == 0]
print(myList)  
# result:[4, 16]
           

清單推導式的具體用法

myString = [string for string in "記得點贊哦"]
print(myString)  
# result: ['記', '得', '點', '贊', '哦']
           
  • 也可以使用多重循環進行推導
  • 沒有清單推導式支援的情況下
result = []
for x in "abc":
    for y in "12":
        result.append(x + y)
print(result) 
# result:['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
           
  • 清單推導式方法
result = [x + y for x in "abc" for y in "12"]
print(result)  
# result:['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
           

後續不在重複正常寫法。

元組推導式的具體用法

那元組tuple怎麼推導呢,直接的想法應該是:

myTuple = (num for num in range(1, 6))
print(myTuple)
# 結果卻是:
# <generator object <genexpr> at 0x00000248A98BFD48>
           

很明顯結果與我們想象的不同,python中小括号的推導式預設為生成器generator,正确的元組tuple推導式是用tuple函數包裹:

myTuple = tuple(num for num in range(1, 6))
print(myTuple)  
# result: (1, 2, 3, 4, 5)
           

字典和集合推導式的具體用法

接下來是字典和集合的推導:

首先,字典的推導

myDict = {num: num**2 for num in range(1,6)}
print(myDict)  
# result: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
           

再來,集合的推導

mySet = {num for num in "123abc123"}
print(mySet)  
# result: {'3', '2', 'b', '1', 'a', 'c'}
           
  • 集合和字典推導都是使用花括号,差別是字典中有key: value的鍵值對。
  • 集合和清單結果的差別:集合是無序的且不可重複的,清單是有序的且可重複的。