python 一些小知识
小知识总结
list
在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错
dict
dict.fromkeys() 前面是一个可迭代对象,把后面的值配给它们,现成键值对,这些键的值指向同一地址
dic = (dict.fromkeys('1,2,3','AAA')) print(dic)
{',': 'AAA', '3': 'AAA', '1': 'AAA', '2': 'AAA'}
因为这些键的值指向同一地址,所以当其中一个键的值变了,其它键的值也会跟着改变
在循环一个字典中,不能删除他的键值对
bool
0 str 列表 字典 set() 这些只要是空的,转化后都是False
非空的就是True
元组
如果元组里只有一个元素且不加逗号,那么此元素原来是什么类型,输出就是什么类型
tu1 = (1) tu2 = (2,) print(tu1) print(tu2)
集合
集合是可变数据类型,但是它里面的元素必须是不可变的数据类型,无序,不重复.
增
add 增加
set1.add('元素') print(set1)
{'barry', 'alex', 'wusir', '元素', 'egon', 'ritian'}
update 迭代加入
set1.update('元素') print(set1)
{'barry', 'alex', '素', '元', 'wusir', 'egon', 'ritian'}
删
pop 随机删除,能返回被删除元素
print(set1.pop()) print(set1)
alex
{'barry', 'egon', 'ritian', 'wusir'}
remove 按元素删除,没有该元素会报错
set1.remove('alex') print(set1)
clear 清空列表
set1.clear() print(set1)
set()
del 删除列表
del set1 print(set1)
查
for in
for i in set1: print(i)
alex
wusir
barry
egon
ritian
求交集
& intersection
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2)
{4, 5}
求并集
| union
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2)
{1, 2, 3, 4, 5, 6, 7, 8}
差集
- difference
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2)
{1, 2, 3}
反交集
^ symmetric_difference
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2)
{1, 2, 3, 6, 7, 8}
子集与超集
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) #set1是set2的子集 print(set1 > set2) #set1是set2的超集
True
False
列表去重
li =[1,2,2,3,3,4,4,5,5,6,6,7,8,8,9] set1 = set(li) li = list(set1) print(li)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表转集合 再转回列表, 这样做效率最高
set是可变数据类型,
set1 = frozenset('barry')
这样可以把set转换成不可变数据类型
copy 拷贝
浅拷贝
l1 = [1,2,3] l2 = l1.copy() print(l1) print(l2)
[1, 2, 3]
[1, 2, 3]
l1 = [1,2,3] l2 = l1.copy() l1.append(4) print(l1) print(l2)
[1, 2, 3, 4]
[1, 2, 3]
l1 = [1,2,3,[1,2,3],4] l2 = l1.copy() l1[3].append(9) print(l1) print(l2)
[1, 2, 3, [1, 2, 3, 9], 4]
[1, 2, 3, [1, 2, 3, 9], 4]
拷贝是在内存中建立一个新的列表,内存地址不是同一个
但是 如果列表中有嵌套的列表或字典,它们的内存地址是同一个
深拷贝
import copy l1 = [1,2,3,[1,2,3],4] l2 = copy.deepcopy(l1) print(l1) print(l2)
[1, 2, 3, [1, 2, 3], 4]
[1, 2, 3, [1, 2, 3], 4]
import copy l1 = [1,2,3,[1,2,3],4] l2 = copy.deepcopy(l1) l1[3].append(9) print(l1) print(l2)
[1, 2, 3, [1, 2, 3, 9], 4]
[1, 2, 3, [1, 2, 3], 4]
深拷贝是拷贝一个新的,独立的列表,两者完全独立
列表的赋值
l1 = [1,[1],2,3,4]
l2 = l1[:]
列表的赋值其实就是浅拷贝,所以它遵从浅拷贝一样的标准
enumerate
enumerate() 自动将元素的索引打印成元组
li = ['alex','taibai','wusir','egon'] for index,i in enumerate(li,1): print(index,i)
li = ['alex','taibai','wusir','egon'] for i in li: print(li.index(i),i)
enumerate(li,1) 可以自定义输出的索引的开始值