列表推导式&字典推导式&集合推导式

列表推导式

旧的列表-------》新的列表

格式:

  1. [表达式 for 变量 in 旧列表]
  2. [表达式 for 变量 in 旧列表 if 条件]
  3. [结果A if 条件 else 结果 for 变量 in 列表]
# 1.列表推导式:格式:[表达式 for 变量 in 旧列表] 或者 [表达式 for 变量 in 旧列表 if 条件]

# 过滤长度小于或等于3的人名
names = ['tom', 'lly', 'qwer', 'drfv lok', 'icfs', 'fdjffi', 'yr']
result = [name for name in names if len(name) > 3]
print(result)

# 单词首字母转换为大写
result = [name.capitalize() for name in names if len(name) > 3]
print(result)

# 打印出1--100中能被3整除的数字
newlist = [i for i in range(1, 101) if i % 3 == 0]
print(newlist)

# 0--5偶数 0--10奇数
# [(偶数,奇数),(),(),(),()]
newlist1 = [(x, y) for x in range(5) if x % 2 == 0 for y in range(10) if y % 2 != 0]
print(newlist1)

list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [5, 4, 8]]
nelist1 = [i[-1] for i in list1]
print(nelist1)

dic1 = {
    
    'name': 'lly', 'salary': 1000}
dic2 = {
    
    'name': 'lu', 'salary': 2300}
dic3 = {
    
    'name': 'yrr', 'salary': 1800}
dic4 = {
    
    'name': 'bccs', 'salary': 1735}

dlist = [dic1, dic2, dic3, dic4]
newdlist = [employee['salary'] + 200 if employee['salary'] > 2000 else employee['salary'] + 500 for employee in dlist]
print(newdlist)

运行结果:

['qwer', 'drfv lok', 'icfs', 'fdjffi']
['Qwer', 'Drfv lok', 'Icfs', 'Fdjffi']
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9)]
[3, 6, 9, 8]
[1500, 2500, 2300, 2235]

集合推导式

集合推导式 {}类似列表推导式,在列表推导式的基础上去除重复项

格式:{表达式 for 变量 in 旧列表}

# 集合推导式 {}类似列表推导式,在列表推导式的基础上去除重复项

list1 = [1, 2, 3, 4, 5, 5, 4, 3, 6, 2, 7, 3]
set1 = {
    
    x-1 for x in list1 if x > 4}  # 注意集合中不能有重复元素
print(set1)

# 运行结果:{4, 5, 6}

字典推导式

格式:

  • {key,value for key,value in 字典.items()}

实例:

# 字典推导式
dict1 = {
    
    'a': 'A', 'b': 'B', 'c': 'C', 'd': 'C'}
newdict1 = {
    
    value: key for key, value in dict1.items()}
print(newdict1)

# 运行结果是:{'A': 'a', 'B': 'b', 'C': 'd'}

猜你喜欢

转载自blog.csdn.net/LLY_A_/article/details/106972957