python常用操作备忘

场景

老是来回切编程语言也不好,经常忘了这些最基本的操作,用的时候还是要搜索下,放到博客里备忘吧。

初始化数组

一维数组

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)

一行设置memo[c]++

if c not in b:
    b[c] = 1
else:
    b[c] += 1

可以用以下两种方式代替

b[c] = b.get(c, 0) + 1
b[c] = b.setdefault(c, 0) + 1

posted @ 2021-03-25 14:02  雪山飞猪  阅读(138)  评论(0编辑  收藏  举报