【Python】推导式

推导式

字典推导式

  1. 想根据某个可迭代对象的元素来创建字典时,可以使用字典推导式。
  2. 字典推导式使用大括号 {} 来包围表达式,并使用键值对的形式来定义字典的元素。
fruits = ['apple', 'banana', 'cherry']
fruit_lengths = {fruit: len(fruit) for fruit in fruits} # 键是水果的名称,值是对应水果名称的长度
print(fruit_lengths)  # 输出: {'apple': 5, 'banana': 6, 'cherry': 6}
  1. 还可以在字典推导式中添加条件语句来过滤元素。例如:
fruits = ['apple', 'banana', 'cherry', 'pear', 'kiwi']
# 想保留长度大于等于6的水果,使用条件语句进行筛选
long_fruits = {fruit: len(fruit) for fruit in fruits if len(fruit) >= 6}
print(long_fruits)  # 输出: {'banana': 6, 'cherry': 6}
  1. 提取字典的子集
# 从字典中提取特定键
D = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F'}
selectedKeys = [0, 2, 5]
X = {k: D[k] for k in selectedKeys}
print(X)    # {0: 'A', 2: 'C', 5: 'F'}
# 从字典中删除特定键
D = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F'}
removeKeys = [0, 2, 5]
X = {k: D[k] for k in D.keys() - removeKeys}
print(X)   
  1. 反转映射/反向查找 —— 在字典中反转key:value对
D = {0: 'red', 1: 'green', 2: 'blue'}
R = {v: k for k,v in D.items()}
print(R) # {'red': 0, 'green': 1, 'blue': 2}
  1. 带有enumerate的字典推导
# 有时想从列表中创建字典,列表索引号为键,列表元素为值。
L = ['red', 'green', 'blue']
D = {k:v for k,v in enumerate(L)}
print(D)    # {0: 'red', 1: 'green', 2: 'blue'}
# 有元素索引的此类词典在各种情况下(例如逐行读取文件)通常很有用。
D = {ix: line for ix, line in enumerate(open('./files/test.txt'))}
print(D)
  1. 使用默认值初始化字典
keys = ['red', 'green', 'blue']

# default value '0'
D = {k: 0 for k in keys}
print(D)    # {'red': 0, 'green': 0, 'blue': 0}
  1. 动态初始化字典
keys = ['name', 'age', 'job']
values = ['Bob', 25, 'Dev']

D = dict(zip(keys, values))
print(D)    # {'name': 'Bob', 'age': 25, 'job': 'Dev'}

D = {k: v for (k, v) in zip(keys, values)}
print(D)    # {'name': 'Bob', 'age': 25, 'job': 'Dev'}

集合推导式

  1. 集合推导式用于创建新的集合对象。它们的语法类似于列表推导式,只是用大括号 {} 包围表达式,而不是方括号 []
numbers = [1, 2, 3, 4, 5]
squared_set = {x**2 for x in numbers}
print(squared_set)  # 输出: {1, 4, 9, 16, 25}

生成器推导式

  1. 生成器推导式与列表推导式非常相似,但是使用圆括号 () 包围表达式,而不是方括号 []。生成器推导式创建的是一个生成器对象,而不是一个列表。这意味着它以惰性方式生成元素,逐个计算值,而不是一次性计算所有值。
numbers = [1, 2, 3, 4, 5]
squared_generator = (x**2 for x in numbers)
for num in squared_generator:
  print(num)

列表推导式

# for循环
list_a = list()
for a in range(5):
    list_a.append(a)
print(list_a)
# 列表推导式
list_b = [b for b in range(5)]
print(list_b)
# in后面跟其他可迭代对象,如字符串
list_c = [7 * c for c in "python"]
print(list_c) # ['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
 
# 带if条件语句的列表推导式
list_d = [d for d in range(6) if d % 2 != 0]
print(list_d) # [1, 3, 5]
 
# 多个for循环
list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
print(list_e) # [(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
 
# 嵌套列表推导式,多个并列条件
list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
print(list_g) # [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]
posted @ 2023-08-15 11:14  Mothlove  阅读(41)  评论(0)    收藏  举报