天天看点

列表推导式,元组推导式,字典推导式,集合推导式使用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的键值对。
  • 集合和列表结果的区别:集合是无序的且不可重复的,列表是有序的且可重复的。