数据转换
元祖:如果元祖里面只有一个元素,有逗号数据类型是元祖,没有逗号这数据类型与元素的数据类型一致。
tu1 =('fgh')
tu2 =('dfg',)
列表:
列表与列表之间可以相加。
在循环一个列表时,如果对列表中的某些元素进行删除,
那么此元素后面的所有元素就会向前进一位,他们的索引就会发生变化。
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
方法一:切片+步长删除
del l1[1::2]
print(l1)
方法二:
l2 = []
for i in range(len(l1)):
if i % 2 == 0:
l2.append(l1[i])
print(l2)
l1 = l2
print(l1)
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
方法三:倒序删除
for index in range(len(l1)-1, -1, -1):
if index % 2 == 1:
l1.pop(index)
print(l1)
在循环一个列表时,最好不要对此列表进行改变大小(增删)的操作。
字典
面试题:创建字典的方式
1,直接创建
dic = {'name':'alex'}
2
dic = dict({'name':'alex'})
print(dic)
3, fromkeys()
dic1 = dict.fromkeys([1,2,3],'alex')
print(dic1)
dic = {'key1': 'value1','key2': 'value2', 'k3':'v3', 'name': 'alex'}
将 dic的键中含有k元素的所有键值对删除。
for key in dic:
if 'k' in key:
dic.pop(key)
报错:dictionary changed size during iteration: 在循环一个字典时,不能改变字典的大小。
dic = {'key':1,'key1':1,'key2':2,'a':1} l = [] for i in dic: if 'k' in i: l.append(i) print(l) for a in l: dic.pop(a) print(dic)
数据类型的转换。
int str bool 三者转换
str <---> bytes
str <---> list
dict.keys() dict.values() dict.items() list()
tuple <---> list
dict ---> list
str ---> list s1 = 'alex wusir taibai' l1 = s1.split() print(l1) list ---> str 此list中的元素全部是str类型 l1 = ['alex', 'wusir', 'taibai'] s2 = ' '.join(l1) print(s2)
tuple <---> list l1 = [1,2,3] tu1 = tuple(l1) print(tu1) tu2 = (0,2,3) l1 = list(tu2) print(l1)
0 " [] () {} set() ---> bool False
赋值运算
l1 = [1,2,3]
l2 = l1
l1.append(666)
print(l2)
print(id(l1))
print(id(l2))
应用场景:面试会考,解释深浅copy
完全独立的copy一份数据,与原数据没有关系,深copy
如果一份数据(列表)第二层时,你想与原数据进行公用,浅copy。
面试题
切片属于浅copy
l1 = [1,2,3,[22,33]]
l2 = l1[:]
l1.append(666)
l1[-1].append(666)
print(l2)
深copy
import copy l1 = [1,2,3,[1,2]] l2 = copy.deepcopy(l1) print(id(l1)) print(id(l2)) print(id(l1[3]) == id(l2[3]))
集合有天然的去重功能:
面试必考:list去重 *****
l1 = [1,1,2,3,4,4,3,2,1,5,5]
set1 = set(l1)
l2 = list(set1)
print(l2)