提升python编程的一些技巧总结(不间断更新)

1. 列表、字典和集合推导式

  • 列表推导

后面接的if操作是可选项。

lst = [i * i for i in range(1,10) if i%2==0] #生成一个新列表
print(lst) # [4, 16, 36, 64]

同理字典推导式和集合推导式也可以if选项。

  • 字典推导
# 字典推导式1:
items = ["Fruits","Books","Othes"]
prices=[23,45,73,56,78]
dic = {item:price for item,price in zip(items,prices)} # {'Fruits': 23, 'Books': 45, 'Othes': 73}
print(dic)

# 字典推导式2:
testDict= {i: i *i for i in range(10)}
print(testDict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
  • 集合推导
s= {i * i for i in range(1,10)}
print(s)

输出:

{64, 1, 4, 36, 9, 16, 49, 81, 25}
  • 条件推导式
#去除None和{}
infos = [{1:2}, None, {}, {3:4, 5:6}]

# 条件推导式方法一:
infos = [info  for info in infos if info != None and len(info) != 0]

# 条件推导式二:一定要加else
infos = [info if (info != None and len(info) != 0) else info for info in infos]

print(infos) #[{1: 2}, {3: 4, 5: 6}]
  • 多层推导式
vec = [[1,2,3],[4,5,6],[7,8,9]]
list = [num for elem in vec for num in elem]

print(list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

2. while…else和for…else

当while和for条件正常结束后,将会执行else操作,如果是使用break强制跳出,则不会执行else

  • 正常结束

while举例:

item = 0
while item < 3:
    item+=1
    print(item)
else:
    print("正常结束!")

for举例:

lst = [1,2,3]
for item in lst:
    print(item)
else:
    print("正常结束!")

以上两个都输出:

1
2
3
正常结束!
  • 非正常结束

while举例:

item = 0
while item < 3:
    item += 1
    print(item)
    if item == 2:
        break
else:
    print("正常结束!")

for举例:

lst = [1,2,3]
for item in lst:
    print(item)
    if item == 2:
        break
else:
    print("正常结束!")

以上两个都输出:

1
2

3. 原地交换多个数值

x,y,z= 10,20,30
print(x,y,z) # 10 20 30
x,y,z= y,z,x
print(x,y,z) # 20 30 10

4. 使用in操作简化if

if m in [1,3,5,7]:

等价于:

if m==1 or m==3 or m==5 or m==7:

5. 内置sort函数与序列的sort方法

  • list的内置排序sort:不改变地址,在原列表基础上排序
  • 函数sorted:会生成新的列表,原列表不变。
lst = [9,2,5,6,8]

# 内建函数方法:
print(sorted(lst)) # [2, 5, 6, 8, 9]
print(lst) # [9, 2, 5, 6, 8]

# 列表方法:
lst.sort()
print(lst) # [2, 5, 6, 8, 9]

6. 将列表存储至新变量中

这种方式,元素个数与列表长度应该严格相同,不然会报错

lst= [1,2,3]
x,y,z= lst
print(x,y,z)

输出:

1 2 3

7. 三元运算符

ans = 3 if 1 > 2 else 4 #if语句为true输出自己,否则输出else
print(ans) # 4

8. 找到列表中数字最多的元素

test= [1,2,3,4,2,2,3,1,4,4,4,4]
print(max(set(test),key=test.count))

输出:

4

9. 比较连接

ans = 3
if 4 < ans >2:
    print(ans)
else:
    print("else")

输出:

else

10. 巧用zip命令

(1)遍历两个列表

lst_1 = ["11", "22"]
lst_2 = ["33", "44"]
for a, b in zip(lst_1, lst_2):
     print(a + " && " + b)

输出:

11 && 33
22 && 44

(2)使用zip对多个列表排序

names = ['John', 'Amy', 'Jack']
scores = [98, 100, 85]  # 分数和名字是一一对应的

#按照names排序
data = list(zip(names, scores))
data.sort()
print(data) # [('Amy', 100), ('Jack', 85), ('John', 98)] ,names和scores列表不会发生改变

#按照分数进行排序
data = list(zip(scores, names))
data.sort()
print(data) # [(85, 'Jack'), (98, 'John'), (100, 'Amy')],names和scores列表不会发生改变

(3)使用两个序列构建一个字典

t1= (1,2,3)
t2= (10,20,30)
dic = dict(zip(t1,t2))
print(dic)

输出:

{1: 10, 2: 20, 3: 30}

11. 带索引的遍历列表

teams = [1,2,3,4]
for index, team in enumerate(teams):
    print(index, team)

输出:

0 1
1 2
2 3
3 4

12. 初始化列表的多个值

lst = [1]*3
print(lst)

输出:

[1, 1, 1]

13. 快速翻转列表

lst = [1,2,3,4,5]

# 反转方式1:
lst = lst[::-1]
print(lst) # [5, 4, 3, 2, 1]

# 反转方式2:内置函数
lst.reverse()
print(lst) # [1, 2, 3, 4, 5]

# 反转方法3:列表方法
#reversed出来的结果是反向的迭代器
lst1 = reversed(lst)
print(type(lst1)) # <class 'list_reverseiterator'>
lst = list(lst1) #内置方法不会影响原始值,所以要进行赋值操作
print(lst) # [5, 4, 3, 2, 1]

14. 使用字典存储选择操作

my_dict = {
    'sum':lambda x,y:x+y,
    'subtract':lambda x,y:x-y
}

print(my_dict['sum'](9,3)) # 12
print(my_dict['subtract'](9,3)) # 6

15. 统计数据个数方法

(1)字典统计方法

data = [1,4,5,6,7,4,334,5,23,1,3,4,4]

# 列表中出现数字出现的次数
d = dict.fromkeys(data, 0) #构建字典,键为:data,值为0
print(d) # {1: 0, 4: 0, 5: 0, 6: 0, 7: 0, 334: 0, 23: 0, 3: 0}
for v in data:
    d[v] += 1
print(d) # {1: 2, 4: 4, 5: 2, 6: 1, 7: 1, 334: 1, 23: 1, 3: 1}

(2)使用collections中的Counter进行计数

from collections import Counter
c = Counter('hello world')
dic = dict(c)
print(c)
print(dic)

#统计出现频率最高的前n个数
print(c.most_common(2)) # [('l', 3), ('o', 2)]

输出:

Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
[('l', 3), ('o', 2)]

16. 访问字典的元素操作

data = {'user': 1, 'name': 'Max', 'three': 4}
# 字典可以通过[]进行赋新值,但是不能访问没有的键值对
data['admin'] = data.get('admin', 6) + 4
print(data['admin']) # 10

#不可以访问没有的元素
print(data['new']) #不可以, 报错!!!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值