码迷,mamicode.com
首页 > 编程语言 > 详细

Python简洁写法(一)

时间:2020-05-30 01:07:32      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:cti   过程   通过   range   赋值   效率   频繁   返回   class   

1、多元赋值

low:其他语言中最常见的将一个变量赋值给临时变量tmp,然后将已经tmp赋值给已经有值的b,这种写法可读性极差,太low了。

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a,b)

new:使用python支持的多元赋值,可以将上面的代码直接简化

a,b= 1,2
print(a,b)

2、循环遍历区间元素

先说下什么是区间元素,就是多少到多少,例如:0 ~ 100、100 ~ 5000

low:这种方法就是先自己写一个列表,里面把元素按顺序填好,然后通过for循环取值

for i in [0,1,2,3,4,5]:
    print(i)

new:我们可以借助range 指定范围,然后直接返回可迭代对象,能够更加节省内存

# 方法一:
for i in range(6):
    print(i)

# 方法二:
for i in range(0,7):
    print(i)

3、遍历带有索引的集合

集合指可以索引取值的list、tuple

文中通过list演示

low:这里必须通过len(data)获取data列表的长度,然后根据循环的索引从data中拿取值,不得不说这种方法很low,先拿到一个索引,然后在从data里根据这个索引取值。

data = ["jack","eric","xander"]
for i in range(len(data)):
    print(data[i]) # 根据索引在从data中获取对应的数据

new:其实python提供了一个函数:enumerate,能够让开发人员在使用for循环的时候直接拿到索引和值

data = ["jack","eric","xander"]
for idx,val in enumerate(data):
    print(idx,val)

4、字符串连接

low:每次使用 + 都会在内存中生成一个新的对象,而这里列表中有5个字符串,也就是说每次循环都要产生一次对象,一共产生了5次,虽然每次都产生新对象,然后再销毁,但是我感觉这是多余的操作,还会导致在运行的过程中频繁的对操作系统申请内存空间

str_list = ["a","b","c","d","e"]

s = str_list[0]
for x in str_list[1:]:
    s += "," + x
print(s)

new:直接使用python提供的join()函数 它只会新生成一个对象,还能节省代码量

str_list = ["a","b","c","d","e"]
print(",".join(str_list))

5、列表推导式

假设我现在要生成 0~100000的整数,然后将其添加到列表中,有两种方法:

low:该方法会一个一个的循环生成整数,然后循环的添加到列表,不但耗时,而且还吃内存(细品)

nums = []
for x in range(100000):
    nums.append(x)
print(len(nums))

new:使用列表推导式,能避免一次性生成大量的元素将内存打爆,可以通过推导式的方式推算出后续的元素(其元素是有规律的)

nums2 = [x2 for x2 in range(100000)]
print(len(nums2))

6、优化列表操作

low:当我们每次对列表进行插入或者删除的时候都会将剩下的元素进行移动,这样会导致列表执行效率很低,但是它的查询效率很高

a_list = ["Eric","Alex","Gigi","Lbj","Koko"]
a_list.pop()
a_list.append("Javy")
print(len(a_list))

new:deque 是一个双向队列的数据结构,删除元素和添加元素会很快,并且能支持左右删除和添加

from collections import deque
b_list = deque(["Eric","Alex","Gigi","Lbj","Koko"])
b_list.popleft()          # 从左边删除元素
b_list.appendleft("Jary") # 从左边添加元素
b_list.append("Xander")   # 从右边添加元素(默认)
print(b_list)

7、序列解包

python有很多语法糖,序列解包是其中一种,如果把一个序列(列表、元组、字符串等.. 各种类型)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量,但是元素的个数需要和变量个数相同,这称为序列解包

low:直接看下面例子(自我感觉一下),不用序列解包的情况下,,代码真的,难看。。。

c_list = ["Jack",10,"M","打篮球"]
name = c_list[0]
age = c_list[1]
male = c_list[2]
hobby = c_list[3]
print(name,age,male,hobby) # Jack 10 M 打篮球

new:当我们用了序列解包之后,代码简洁了很多,有木有,有木有?

c_list = ["Jack",10,"M","打篮球"]
name,age,male,hobby = c_list

print(name,age,male,hobby) # Jack 10 M 打篮球

Python简洁写法(一)

标签:cti   过程   通过   range   赋值   效率   频繁   返回   class   

原文地址:https://www.cnblogs.com/jasonminghao/p/12990121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!