一、字符串
1.1 字符串分割:
s = "123*456*789*"
split_all = s.split("*") # ['123', '456', '789', '']
split_1 = s.split("*",1) # ['123', '456*789*']
# 按照位置分割
s = s[:3] # “123”
s = s[start:end] #包含start,不包含end,start和end都是index
1.2 字符替换
s = "123*456*789*"
s = s.replace("*","") # 123456789
1.3 子字符串计数
这个子字符串可以是单个字符,也可以是一个字符串
# str.count(sub, start= 0,end=len(string))
str = "123*456*789"
num = str.count("123") # 1
num = str.count("*") # 2
1.4 正则化
正则化需要用到 re 这个包
import re
s = "123*456*789"
s_split = re.split("\*", s) # ['123', '456', '789'] \*是正则语句
二、list
2.1、索引
多维list的元素索引,不像np.array 可以直接写 array[ i, j ],而是要写 list[ i ][ j ]
2.2 删除指定项
list = [1,2,1,1,3,4]
list.remove(1) # [2, 1, 1, 3, 4]
index = 0
del list[index] #删除指定位置元素
list.pop(index) #删除指定位置元素,带返回值
2.3 获得元素索引
list = [1,2,3,4]
i = list.index(2) # 结果为 1, 只返回第一个找到的数的位置,如果一个都没有,会报错
2.4 在指定位置插入元素
# list.insert(index, obj)
list = [1,2,3,4]
list.insert(0, 8)
print(list) # [8,1,2,3,4]
2.5 list 相加
list相加相当于 append
a = [1,2]
a = a + [1] # [1,2,1] 相当于 a.append(1)
2.6、list的copy:
不要用 list.copy() 这是浅拷贝,对于多层list无效。要用copy这个包
import copy
list = [[1],[2]]
list2 = copy.deepcopy(list)
2.7 list排序
list.sort() 只可用于list对象。对于其他迭代对象,使用sorted()函数。sorted函数参考 https://www.runoob.com/python/python-func-sorted.html
# list.sort(cmp=None, key=None, reverse=False) 默认从小到大排序
list = [4,6,2,7,8,1]
list.sort() # [1, 2, 4, 6, 7, 8]
# 方法二,可对所有可迭代的数排序
# sorted(iterable, cmp=None, key=None, reverse=False)
list2 = sorted(list)
2.8 多维数组切片
list没法进行多维数组切片。只能切一层。要想弄多维切片,得依次遍历原数组中的数,重新生成一个新数组。
三、dictionary
3.1 普通的字典:
dic = {}
dic["a"] = 1 # {'a':1}
3.2 collections包
这个包里有一些特殊的字典 ,参考: https://www.jianshu.com/p/f2a429aa5963
其中有个带默认初始值的字典 defaultdict。对一个普通字典,调用一个没有出现过的key会报错,但是对collection.defaultdict,会给这个key赋一个默认值。
import collections
dic = collections.defaultdict(lambda:1) # 默认初始值是 1
dic = collections.defaultdict(lambda:[]) # 默认初始值为一个空的list
3.3 字典的其他属性
参考:https://www.runoob.com/python/python-dictionary.html
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
8 | dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 返回并删除字典中的最后一对键和值。 |
四、数字
abs(num) | 取绝对值 |
num1 // num2 | 整除 |
num1 % num2 | 取余数 |
num1 ** num2 | 指数 num1^num2 |
五、堆!
python 有个模块 heapq 。这个是个小根堆(如果想要大根堆的话,可以存的时候,数值取反;然后取数值的时候再取反就好了)
heapq 属性与使用:
1、# 将 item 的值加入 heap 中,保持堆的不变性。
import heapq
heapq.heappush(heap, item) # heap为一个list,item为一个int or float数值。插入完成后,这个list是按照最小堆排序的,即heap[0]为最小数
eg:
import heapq
h = []
nums = [3,6,2,4,7,8,9]
for num in nums:
heapq.heappush(h,num)
print(h) #[2, 4, 3, 6, 7, 8, 9]
2、弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError
。使用 heap[0]
,可以只访问最小的元素而不弹出它。
heapq.heappop(heap)
3、将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush()
再调用 heappop()
运行起来更有效率。
heapq.heappushpop(heap, item)
4、将list x 转换成堆,原地,线性时间内。
heapq.heapify(x)
5、弹出并返回 heap 中最小的一项,同时推入新的 item。 (这里只是将堆的root和item替换,然后对堆重新排序,root是多少就是多少)堆的大小不变。 如果堆为空则引发 IndexError
。
这个单步骤操作比 heappop()
加 heappush()
更高效,并且在使用固定大小的堆时更为适宜。 pop/push 组合总是会从堆中返回一个元素并将其替换为 item。
返回的值可能会比添加的 item 更大。 如果不希望如此,可考虑改用 heappushpop()
。 它的 push/pop 组合会返回两个值中较小的一个,将较大的值留在堆中。
heapq.heapreplace(heap, item)