【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)


欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中

【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)

大学前面2年学的C语言、Java等语言,刚刚接触Python就觉得“人生苦短,我用Python”,很多的骚操作和前面所学的语言相比简直是黑科技。

  1. 交换变量
  2. 集合去重
  3. 列表推导、集合推导和字典推导
  4. 统计字符串中各个字符出现的次数
  5. 优雅地打印JSON数据
  6. 行内的if语句
  7. 符合正常逻辑的数值比较
  8. 田忌赛马之同时迭代两个列表
  9. 带索引的列表迭代
  10. 带有条件的列表推导
  11. 初始化列表的值
  12. 列表合成字符串
  13. 从字典中获取元素
  14. 切片获取列表子集的5种方法
  15. 利用迭代器获得列表中的子项的排列组合

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文件】
【更多内容敬请期待】


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发现你走远了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值