目录
欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)
大学前面2年学的C语言、Java等语言,刚刚接触Python就觉得“人生苦短,我用Python”,很多的骚操作和前面所学的语言相比简直是黑科技。
- 交换变量
- 集合去重
- 列表推导、集合推导和字典推导
- 统计字符串中各个字符出现的次数
- 优雅地打印JSON数据
- 行内的if语句
- 符合正常逻辑的数值比较
- 田忌赛马之同时迭代两个列表
- 带索引的列表迭代
- 带有条件的列表推导
- 初始化列表的值
- 列表合成字符串
- 从字典中获取元素
- 切片获取列表子集的5种方法
- 利用迭代器获得列表中的子项的排列组合
1. 交换变量
交换a和b的变量值
print("其他语言的交换变量思路")
a,b=1,2#变量的赋值
c=a#引入中间量临时存放a的值
a=b
b=c
print(a,b)
print("python的交换变量思路")
a,b=1,2#变量的赋值
a,b=b,a
print(a,b)
2. 集合去重
注意这个集合是花括号{}
my_set = {1, 2, 1, 2, 3, 4}
print(my_set)#{1, 2, 3, 4}
3. 列表推导、集合推导和字典推导
这可不是偷懒,这是简洁优雅的姿势!
列表推导
old_list = [1, 2, 3, 4, 5]
new_list = [x + x + 1 for x in old_list]
print(new_list) # [3, 5, 7, 9, 11]
集合推导
# Set Comprehensions
old_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]
new_set = {x for x in old_list if x % 2 == 0}#只选择其中的偶数
print(new_set)#{8, 2, 4}
字典推导
Dict_set = {x: str(x) for x in range(1, 11)}
print(Dict_set)
4. 统计字符串中各个字符出现的次数
Python的collections类库内置的dict类的子类,计数时使用Counter计数对象。
import collections
words = collections.Counter( "hello world ")
print(words)#Counter({'l': 3, 'o': 2, ' ': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
print(words['l'])#获得其中'l'的字符个数
print(words.most_common(2))#按照出现次数降序排列,取得出现次数最多的2个字符 [('l', 3), ('o', 2)]
print(words.most_common(2)[0])#取得降序排列的第一个,也就是次数出现最多的字符 ('l', 3)
5.优雅地打印JSON数据
JSON数据在我们进行web开发、大数据分析的时候经常出现,格式化优雅的输出JSON的姿势
indent=4 这个参数使得json数据可以有参差的层次
import json
data = {"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": True},
{"age": 29, "name": "Joe", "lactose_intolerant": False}]}
print(json.dumps(data)) # 没有indent=4 就是一行的扁平输出
# {"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}
print(json.dumps(data, indent=4)) # indent=4 这个参数使得json数据可以有参差的层次
# {
# "status": "OK",
# "count": 2,
# "results": [
# {
# "age": 27,
# "name": "Oz",
# "lactose_intolerant": true
# },
# {
# "age": 29,
# "name": "Joe",
# "lactose_intolerant": false
# }
# ]
# }
6.行内的if语句
有点怪异,但是确又觉得符合日常逻辑
print ("Hello") if True else "World"
6. 符合正常逻辑的数值比较
就是我们学C语言是被老师作为错误典型的左右同时加上比较符号,在Python中,我们认为他是合理的。
x = 3
if 4 > x > 1:
print("我大于1并且小于4")
if 1 < x > 2:
print("我大于1并且大于2")
7. 田忌赛马之同时迭代两个列表
这里就用到了田忌赛马的典故!
Team1s = ["上等马", "中等马"]
Team2s = ["中等马", "下等马"]
for Team1, Team2 in zip(Team1s, Team2s):
print(Team1 + " vs. " + Team2)
# 上等马 vs. 中等马
# 中等马 vs. 下等马
8. 带索引的列表迭代
index是索引,在print 打印时用“,”连接索引和子项
teams = ["上等马", "中等马", "中等马", "下等马"]
for index, team in enumerate(teams):
print (index, team)
# 0 上等马
# 1 中等马
# 2 中等马
# 3 下等马
9. 带有条件的列表推导
现在我们要获得1-6中的奇数
用for循环的通常做法
print("用for循环的通常做法")
numbers = [1,2,3,4,5,6]
odd = []
for number in numbers:
if number%2 == 1:
odd .append(number)
print(odd)
带有条件的列表推导的优雅做法
print("带有条件的列表推导的优雅做法")
numbers = [1,2,3,4,5,6]
odd = [number for number in numbers if number%2 == 1]
print(odd)
10. 初始化列表的值
灵活运用 “*”
进行批处理初始值
orgin_list = [0]*10
print (orgin_list)#[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
12. 列表合成字符串
用逗号或是其他符号把列表中的每一项连接成字符串
teams = ["上等马", "中等马", "中等马", "下等马"]
print (", ".join(teams))#上等马, 中等马, 中等马, 下等马 用逗号把列表中的每一项连接成字符串
13. 从字典中获取元素
try/except代码是异常处理的方式解决找不到字典中的某个元素的处理方法,但是有缺省参数的方法避免这么冗长的写法。尝试在字典中找key,如果没有找到对应的value将用第二个参数设为其变量值。
data.get( 键名, 缺省值)
传统写法顺利获取到键值
data = { 'name': '发现你走远了','user': 'nanli', 'password': '123456'}
is_name=""#一开始是空的
try:
is_name = data['name']#如果能根据键名获取到键值,那么得到键值 发现你走远了
except KeyError:
is_name = False #如果不能根据键名获取到键值,那么得到False
print(is_name)#发现你走远了
传统写法通过异常处理获取不到键值
data = { 'name': '发现你走远了','user': 'nanli', 'password': '123456'}
is_name=""#一开始是空的
try:
is_name = data['name123']#如果能根据键名获取到键值,那么得到键值 发现你走远了
except KeyError:#键名错误的异常捕获
is_name = False #如果不能根据键名获取到键值,那么得到False
print(is_name)#False
优雅写法
data = {'name': '发现你走远了','user': 'nanli', 'password': '123456'}
is_name = data.get( 'admin' , False) #如果不能根据键名获取到键值,那么得到False
print(is_name)#False
14. 切片获取列表子集的5种方法
x = [1,2,3,4,5,6,7,8,9,10]
print("前5个")
print (x[:5])#[1, 2, 3, 4, 5]
print("中间2个")
print (x[4:6])#[5, 6]
print("最后3个")
print (x[-3:])#[8, 9, 10] 最后一位是-1,参数-3表示-1 -2 -3取末尾三个
print("奇数项,确切地说,从第一个子项开始,取第0+2n个子项且不包括第0位")
print (x[0::2])#也可以缺省不写0,写成print (x[::2])
print("偶数项,确切地说,从第一个子项开始,取第1+2n个子项且不包括第1位")
print (x[1::2])
使用Counter
统计字符串中各个字符的个数进行对字符串划分子集
import collections
words = collections.Counter( "hello ")#使用统计字符串中各个字符的个数进行对字符串划分子集
print(words)#Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1, ' ': 1})
15. 利用迭代器获得列表中的子项的排列组合
利用迭代器获得列表中的子项的排列组合
import itertools
teams = ["上等马", "中等马", "下等马"]
for game in itertools.combinations(teams, 2):
print (game)
# ('上等马', '中等马')
# ('上等马', '下等马')
# ('中等马', '下等马')
总结
大家喜欢的话,给个👍,点个关注!继续跟大家分享敲代码过程中遇到的问题!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2022 mzh
Crated:2022-1-10
欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
【Python安装第三方库一行命令永久提高速度】
【使用PyInstaller打包Python文件】
【更多内容敬请期待】