python日常注意小知识集锦
@toc
sort()和sorted()
以列表结果为例 - sort()没有结果返回,但对列表进行了排序(列表本身被改变) - sorted(),全局函数,有结果返回,注意:列表本身没有被改变。
示例如下:
zip()和enumerate()
- zip()能完成任意两个或多个不同类型的列表的“缝合”
- enumerate()只能为可迭代的序列(如列表、迭代器等)提供数值类型的索引封装
字典
赋值问题
- 一般不要用赋值的方式来将一个字典赋值给另一个字典,因为这时它们指向的是同一个对象,对一个字典进行操作会影响另一个字典的元素。如果的确新建的字典的信息来自一个已经创建好了的字典,此时可以通过方法copy() 来完成。
get()方法和中括号方式
- 通过 get()方法访问字典元素的方式与中括号的访问方式的区别:即使访问的键不存在,它也不会抛出异常,而是返回一个“None”。如果返回“None”不能满足要求,还可以返回提示信息。中括号的方式,若访问的键不存在,会报异常:KeyError。
items()、keys()和values()
- items():显示字典的所有元素(即键/值对)
- keys():显示所有的键
- values():显示所有的值
os模块
mkdir()和makedirs()
当父目录不存在时,os.mkdir(path)不会创建目录,并会报错:FileNotFoundError,但是 os.makedirs(path)会创建父目录。
json模块
dumps()与loads()
- json.dumps():将Python对象序列化(即编码)为JSON格式的字符串。
- json.loads():将JSON格式的字符串反序列化(即解码)为Python对象。
dump()与load()
如果我们要处理的是文件而不是字符串,则可以使用json.dump()和json.load()来编码和解码JSON数据(即动词dump和load后面没有字母s)
random模块
随机挑选元素
- choice():从众多元素中选取一个元素
- choices():一次性随机挑选多个元素,可能会存在重复元素(有放回抽样)
- sample():从指定序列中随机获取指定长度的片段,原有序列不会改变。一次性随机抽取多个不重复的元素
- shuffle():对序列的所有元素进行打乱排序
二维数组展平:ravel()和flatten()
- ravel()方法:返回的仅仅是原始数组的视图而已,原始数组本身并没有发生变化。
- flatten()函数:同样可以完成将多维数组展平成一维数组的操作。不同于ravel()返回的是原始数组的视图,flatten()会重新分配内存,完成一次从原始数据到新内存空间的深拷贝,但原始数组并没有发生任何变化。
re模块
“ .* ”和“ .*? ”的区别
- 点号表示任意非换行符的字符
- 星号表示匹配它前面的字符0次或者任意多次
- " .* ”表示匹配一串任意长度的字符串任意次
- “.*? ”,就是匹配一个能满足要求的最短字符串 举一个例子,10个人肩并肩并排站着,使用“(.)”取到了第1个人左手到第10个人右手之间的所有东西,而使用“(.? )”取到的是“每个人”的左手和右手之间的东西。
一句话总结如下。 ① “.*”:贪婪模式,获取最长的满足条件的字符串。 ② “.*? ”:非贪婪模式,获取最短的能满足条件的字符串。