场景
老是来回切编程语言也不好,经常忘了这些最基本的操作,用的时候还是要搜索下,放到博客里备忘吧。
初始化数组
一维数组
n = 5
arr = [0] * n
二维数组
n, m = 5, 5
arr = [[0] * n for i in range(m)]
多维数组
这时候就要用到numpy了,np.zeros,np.ones都是比较常用的,初始化数组非常方便
import numpy as np
n, m, o = 3, 4, 5
# 一维
np.zeros(5)
# 二维
np.zeros((5, 5))
# N维数组 n*m*o
n, m, o = 5, 5, 5
np.zeros((n, m, o), dtype=int)
模拟别的语言的for循环
这里需要用到range函数
range(start, stop, step)
计数到stop结束,但是不包含stop
python3的range返回的一是个可以迭代的对象,不是列表
range(5) == range(0,5) == range(0,5,1) 返回[0,1,2,3,4]
正向:for i=0; i < n; i++
for i in range(0, n):
print(i)
正向:for i=0; i <= n; i++
for i in range(0, n+1):
print(i)
反向:for i=n; i > 0; i--
for i in range(n, 0, -1):
print(i)
反向:for i=n; i >= 0; i--
for i in range(n, -1, -1):
print(i)
遍历list
先初始化一个list
list = ['a', 'b', 'c']
方式一:for v in list
for v in list:
print(v)
方式二:for i, v in enumerate(list)
enumerate会多返回一个索引的index
for i, v in enumerate(list):
print(i, v)
值是否存在:in/not in
if 'a' in list:
print(list)
if 'b' not in list:
print(list)
遍历dict
先初始化一个dict
m = {'a': 'A', 'b': 'B', 'c': 'C'}
方式一:for k in m
for k in m:
print(k, m[k])
方式二:for i, k in enumerate(m)
注意:enumerate返回的是index,不是key
for i, k in enumerate(m):
print(i, k)
方式三:for k, v in m.items()
for k, v in m.items():
print(k, v)
方式四:for v in m.values()
for v in m.values():
print(v)
values会返回一个值的list,如果想用键的list可以使用keys方法
键是否存在:in/not in
if 'a' in m:
print(m)
if 'b' not in m:
print(m)
推导式
list生成
其实是就住[]放v,生成一个新list
# 原数组
newList = [v for v in list]
# 只要其中奇数索引的值
newList = [v for i,v in enumerate(list) if i % 2 == 0]
dict生成
其实就是往{}放k:v,生成一个新的dict
# 原dict
newM = {k: v for k, v in m.items()}
# 变成一个index:value的dict
newL = {k: v for k, v in enumerate(l)}
对象拷贝
普通拷贝list和dict
list和dict默认都是传递的引用,可以用下面的方式拷贝
# list
l = ['a','b','c','d','e']
l2 = l[:] #切片是拷贝
# dict
m = {'a':'A'}
m2 = {**m} # 新建
万能拷贝copy/deepcopy
import copy
# 支持一级拷贝
copy.copy(obj)
# 支持嵌套拷贝
copy.deepcopy(obj)
正负无穷
# 正无穷
print(float("inf"))
print(float("inf")+1)
# 负无穷
print(float("-inf"))
print(float("-inf")+1)
三元表达式
def max(a,b):
if a>b:
return a
else:
return b
def max(a,b):
return a if a>b else b
生成器yield
一个函数如果使用yield来返回的话,这个函数被称作生成器。
避免了一次返回特别耗内存的数据。用for循环可以遍历所有的数据
import os
# 遍历目录得到该所有的子目录和文件
def getAllFiles(dir):
for root,dirs,files in os.walk(dir):
for file in files:
yield os.path.join(root, file)
res=getAllFiles("/Users/chenqionghe/python/test")
for v in res:
print(v)