python 遇到的一些有用的语法

一、字符串

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 

序号函数及描述
1dict.clear()
删除字典内所有元素
2dict.copy()
返回一个字典的浅复制
3dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5dict.has_key(key)
如果键在字典dict里返回true,否则返回false
6dict.items()
以列表返回可遍历的(键, 值) 元组数组
7dict.keys()
以列表返回一个字典所有的键
8dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)
把字典dict2的键/值对更新到dict里
10dict.values()
以列表返回字典中的所有值
11pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12popitem()
返回并删除字典中的最后一对键和值。

 四、数字

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)

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值