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) 可以自定义输出的索引的开始值

原文地址:https://www.cnblogs.com/GrandDarkness/p/8086593.html