python中的一些实用技巧【持续更新】

一、逆序迭代

#正序:
range(4)
#输出:0,1,2,3

【#逆序方法一:】
reversed(range(4))
输出:3,2,1,0

【#逆序方法二:】
range(3,-1,-1)
#输出:3,2,1,0

【#逆序方法三:列表逆序切片法】
range(4)[::-1]
输出:3,2,1,0

二、两个列表,对应位置相乘

【方法1:】
list1=[1,2,3]
list2=[4,5,6]
list3=list(map(lambda x:x[0]*x[1],list(zip(a1,a2))  ))
输出:
[4,10,18]


【方法2:】
import numpy as np
list3=list(np.multiply(np.array(list1),np.array(list2)))
输出:
[4,10,18]

三、python中可变对象作为函数的参数时,是地址传递;不可变对象,作为参数,是值传递,即不共用同一内存单元。

不可变对象:数字,字符串,元组;
可变对象:列表,字典,自定义类的实例。

举个例子:

# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

a=ListNode(0)
b=a
print(id(a))
print(id(b))

输出:
140392472073496
140392472073496

可见这两个变量指向同一内存单元,python是基于值的管理方式,当给变量赋值的时候,系统会为这个值分配内存空间,然后让这个变量指向这个值,当改变变量的值时,系统会为这个新的值分配另一个内存空间,然后还是让这个变量指向这个新值。

也就是说,C语言中变量变的是内存空间中的值,不变的是地址;而在Python中,变量变的是地址,不变的是内存空间中的值。

四、堆相关标准库

heapq库

heapify(A):将数组A转换为堆,默认为小根堆。

五、三元操作符

1)for与if else

[ m**2 if m > 10 else m**4 for m in range(20) ] 
输出:[0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361]

2)for 与if

[m**2  for m in range(20) if m > 10]
输出:[121, 144, 169, 196, 225, 256, 289, 324, 361]

六、存储列表元素到新的变量中

In [1]: testlist = [1,2,3] 
 
In [2]: x,y,z = testlist 
 
In [3]: print(x,y,z) 
1 2 3

七、简化if语句

 if m in [1,3,5,7]:
而不是:
if m==1 or m==3 or m==5 or m==7:

八、从两个相关的序列构建一个字典

In [1]: t1 = (1,2,3) 
 
In [2]: t2 =(10,20,30) 
 
In [3]: dict(zip(t1,t2)) 
Out[4]: {1: 10, 2: 20, 3: 30}

九、善用map函数

l=['2','3','6']
def func(input):
    return int(input)+1
ll=list(map(func,l))
print(ll)

或者
l=['2','3','6']
ll=list(map(lambda x:int(x)+1,l))
print(ll)

输出:[3,4,7]
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表

十、sys.path.insert(0,")

新添加的目录会优先于其他目录被import检查

十一、os.getcwd() 

返回当前进程的工作目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值