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的鍵值對。
- 集合和清單結果的差別:集合是無序的且不可重複的,清單是有序的且可重複的。