Python基础知识—Python的技巧
- Lambda
lambda x: x+1
- for的简写模式
[i*2 for i in range(10)]
{"i"+str(i): i*2 for i in range(10)}
- if else 简写模式
a = 1 if True else 2
- 一行for + if
[i*2 for i in range(10) if i%2==0]
- enumerate
for i, item in enumerate(items)
- zip
for n, s in zip(items, scores)
- reverse & reversed
list.reverse()
for i in reversed(list)
1)Lambda:更直接的Function
- 即使一个简单的add功能,都需要写下方4行的代码
def add(a, b):
return a + b
print(add(1, 2))
- 如果你满足
- 功能很简单
- 调用次数不多,没有正式的功能
add = lambda a, b: a+b
print(add(1, 2))
但lambda
不能滥用,有约定的前提,它不是正式功能,你要临时使用的时候可以用,正式使用的功能时,,还是不要写lambda里,就不是很正式
2)for的简单写法
l = []
for i in range(10):
l.append(i*2)
print(l)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
简化写法:
l = [i * 2 for i in range(10)]
print(l)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
甚至还可以使用这种方法创建字典
d = {"index"+str(i): i*2 for i in range(10)}
print(d)
{'index0': 0, 'index1': 2, 'index2': 4, 'index3': 6, 'index4': 8, 'index5': 10, 'index6': 12, 'index7': 14, 'index8': 16, 'index9': 18}
使用场景,for循环内部比较简单时适合
3)if语句的简单写法
done = False
if done:
a = 1
else:
a = 2
print(a)
- 简单写法
done = False
a = 1 if done else 2
print(a)
也是if语句内部比较简单时使用
4)for+判断简单写法
适用于:
- 我要用一行for生成一个列表/字典
- 对原始数据进行判断,符合要求的生成,不符合的抛弃
复杂写法:
l = []
for i in range(10):
if i % 2 == 0:
l.append(i*2)
print(l)
[0, 4, 8, 12, 16]
简写
l = [i*2 for i in range(10) if i % 2 == 0]
print(l)
[0, 4, 8, 12, 16]
- 同样字典也是可以的
l = {"index"+str(i): i*2 for i in range(10) if i % 2 == }
print(l)
[0, 4, 8, 12, 16]
5)enumerate 自动加 index
- 在循环中计数,达到一定的数值时进行相对应的操作
传统写法:
count = 0
l = [11, 22, 33, 44]
for data in l:
if count == 2:
data += 11
l[count] = data
count += 1
print(l)
[11, 22, 44, 44]
简便写法:
l = [11, 22, 33, 44]
for count, data in enumerate(l):
if count == 2:
data += 11
l[count] = data
print(l)
[11, 22, 44, 44]
还可以初始化count
的数值
l = [11, 22, 33, 44]
d = {}
for count, data in enumerate(l, start=5):
d[count] = data
print(d)
{5: 11, 6: 22, 7: 33, 8: 44}
6)Zip同时迭代
- 同时处理俩个列表,一个是姓名一个是分数,将它们合并成一个字典
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for i in range(3):
d[name[i]] = score[i]
print(d)
c
简化:
name = ["a", "b", "c"]
score = [1, 2, 3]
d = {}
for n, s in zip(name, score):
d[n] = s
print(d)
{'a': 1, 'b': 2, 'c': 3}
- 如果需要同时循环的东西变多了,也可以使用zip
name = ["a", "b", "c"]
score = [1, 2, 3]
bonus = [1, 0, 1]
d = {}
for n, s, b in zip(name, score, bonus):
d[n] = s + b
print(d)
{'a': 2, 'b': 2, 'c': 4}
7)reverse & reversed 翻转列表
- 第一种
l = [1, 2, 3]
_l = []
for i in range(len(l)):
_l.append(l[-i-1])
print(_l)
[3, 2, 1]
- 第二种
l = [1, 2, 3]
_l = [l[-i-1] for i in range(len(l))]
print(_l)
[3, 2, 1]
- 第三种
l = [1, 2, 3]
l.reverse()
print(l)
[3, 2, 1]
- 第四种
l = [1, 2, 3]
_l = l[::-1]
print(l)
print(_l)
[1, 2, 3]
[3, 2, 1]
参考:莫烦Python