一、逆序迭代
#正序:
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()
返回当前进程的工作目录