python笔记x-pythonic 优雅语法

交互赋值

常规写法

a = 1
b = 2

c = a
a = b
b = c
print(a, b)

优雅写法

a = 1
b = 2

a, b = b, a
print(a, b)

拓展:斐波那契数列

num = 100
a = 0  # 首位,每循环一次 a = b
b = 1  # 末位,每循环一次 b = n
n = 1  # 求和,每循环一次 n = a + b
print(n)

while n <= num:
    n = a + b
    if n <= num:
        print(n)
        a, b = b, n
    else:
        break

三目运算

常规写法

age = 20

if age > 18:
    role = 'adult'
else:
    role = 'child'
print(role)

优雅写法

age = 20
role = 'adult' if age > 20 else 'child'
print(role)

格式说明

role = 'value_if_true if condition else value_if_false

  • condition:表达式,判断通过执行value_if_false,判断不通过执行value_if_false
  • value_if_false:运算符
  • value_if_false:运算符

推导式

  • 列表推导式(list)
  • 字典推导式(dict)
  • 集合推导式(set)
  • 生成器推导式

注意:元组(tuple)没有推导式

列表推导式(list):

案例:队列数平方案例

常规写法

a = []
for i in range(1, 11):
    a.append(i * i)
print(a)

# 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

优雅写法

a = [i * i for i in range(1, 11)]
print(a)

# 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表推导式(list):

案例:带if的案例,找出队列中大于0的数
常规写法

a = [1, 3, -3, 4, -2, 8, -7, 6]
b = []

for i in a:
    if i > 0:
        b.append(i)
print(b)

优雅写法

a = [1, 3, -3, 4, -2, 8, -7, 6]

b = [i for i in a if i > 0]
print(b)
字典推导式(dcit):

案例:将字典dict1 = {"001": "aa", "002": "bb", "003": "cc"}的key和value互换
常规写法

dict1 = {"001": "aa", "002": "bb", "003": "cc"}
dict2 = {}

for key, value in dict1.items():
    dict2[value] = key
print(dict2)

优雅写法

dict1 = {"001": "aa", "002": "bb", "003": "cc"}

dict3 = {value: key for key, value in dict1.items()}
print(dict3)
集合推导式(set):

案例:挑选出两个字符串中同时出现的字符,并放在集合中
常规写法

set1 = set()
for s in "hogwartsss":
    if s in "hello world":
        set1.add(s)
print(set1)

# 输出:{'r', 'h', 'w', 'o'}

优雅写法

set2 = {s for s in "hogwartsss" if s in "hello world"}
print(set2)

# 输出:{'r', 'h', 'w', 'o'}
生成器推导式
posted @ 2024-05-31 00:31  捕者  阅读(23)  评论(0)    收藏  举报