玩转Python小技巧【i for i in range()】+【or】

在刚接触 Python 后,经常使用 Java、 C语言的你在遇到 [i for i in range(1,10)]a = b or c这样的句式常常会让你感到不知所措。其实在 Python 中这种表达式称为列表解析(List Comprehensions)或列表推导式,类似的还有字典解析、集合解析等等。它是将一个列表转换成另一个列表的重要工具,比 普通的 for 循环 更精简,运行更快

or的用法

在这条赋值语句中的 or 的含义是判断 b 和 c 中不为 None【False】 的一个赋值给 a,两个都不为 None【False】 则选择前面的赋值给 a
示例:

b = 1
c = 0
d = 1
e = 0

a = b or c
print(a)
print("*"*10)

a = c or d
print(a)
print("*" * 10)

a = c or e
print(a)

输出:

1
**********
1
**********
0

普通语法【列表推导式】

[expression for iter_val in iterable]

[expression for iter_val in iterable if cond_expr]

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 forif子句。
返回结果是一个根据表达从其后的 forif 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

普通列表

list1 = [i * 2 for i in range(10)]
print(list1)
    
list2 = [i * 2 for i in range(10) if i > 5]
print(list2)

arr = [2, 3, 4, 5, 6]
list3 = [temp + 2 for temp in arr]
print(list3)

输出:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[12, 14, 16, 18]
[4, 5, 6, 7, 8]

矩阵列表

vec = [1, 3, 5]
mul_list = [[x, x ** 2] for x in vec]
print(mul_list)

# Python的列表还可以嵌套
m = 3
n = 2
dp = [[False for j in range(n)] for i in range(m)]  # [False for j in range(n)]一个长度为2的列表在内部循环3次
print(dp)

matrix = [[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 0, 1, 2]]
matrix_temp = [[row[i] for row in matrix] for i in range(4)] # 行列互换
print(matrix_temp)

for row in matrix:  # row行 column列
    print(row)

输出:

[[1, 1], [3, 9], [5, 25]]
[[False, False], [False, False], [False, False]]

[[1, 5, 9], [2, 6, 0], [3, 7, 1], [4, 8, 2]]
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 0, 1, 2]

嵌套元组和字典

list1 = ['A', 'B', 'C']
list2 = [1, 2, 3]
tuple_list = [(m, n) for m in list1 for n in list2]
print(tuple_list)

dict_list = [{m: n} for m in list1 for n in list2]
print(dict_list)

输出:

[('A', 1), ('A', 2), ('A', 3), ('B', 1), ('B', 2), ('B', 3), ('C', 1), ('C', 2), ('C', 3)]
[{'A': 1}, {'A': 2}, {'A': 3}, {'B': 1}, {'B': 2}, {'B': 3}, {'C': 1}, {'C': 2}, {'C': 3}]

字典解析式

dict1 = {"name": "小明",
         "age": 18,
         "gender": True,
         "height": 1.75}
dic = {key: value for key, value in dict1.items() if key == 'age'}
print(dic)

输出:

{'age': 18}

集合解析式

arr = [0, 1, 2, 3, 4, 0, 1, 7, 8, 6]
tuple_arr = {i for i in arr if i > 4}
print(tuple_arr)

输出:

{8, 6, 7}
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值