在基础数据类型中可能遇到的坑:
元组:
tuple1=(1) 的数据类型是 int , tuple2=('alex') 的数据类型是 str 等
tuple1=(1,) 和 tuple2 的数据类型是 tuple
列表:
列表与列表之间可以相加, 但不可以减 (面试题)
- list1=[1,2,3]
- list2=['a','b']
- list3=list1+list2
- print(list3)
- #[1, 2, 3, 'a', 'b']
对于可变数据类型容易遇到的坑:
列表: 在 for 循环中删除列表中的元素, 索引会跟着变化
- # 删除列表中偶数索引对应的元素
- # 方法 1: 新建一个列表, 将奇数索引对应的元素添加进去
- list1=[1,2,3,4,5,6,7]
- list2=[]
- for i in list1:
- if list1.index(i) % 2 == 1:
- list2.append(i)
- print(list2
- # 方法 2: 从列表的最后开始删
- list1=[1,2,3,4,5,6,7]
- for i in range(len(list1)-1,-1,-1):
- if i % 2 == 0:
- list1.pop(i)
- print(list1)
- # 方法 3
- # list1=[1,2,3,4,5,6,7]
- # del list1[0::2]
- # print(list1)
字典: 在 for 循环中删除字典中的键值对, for 循环会报错
- # 删除字典中含 k 的键
- # 方法 1: 将 keys 提取到列表中, 循环去除
- dic={'k1':1,'k2':2,'name':3}
- list1=list(dic.keys())
- for i in list1:
- if 'k' in i:
- dic.pop(i)
- print(dic)
- # # 方法 2
- # dic={'k1':1,'k2':2,'name':3}
- # dic2={}
- # for k in dic.keys():
- # if 'k' not in k:
- # dic2.setdefault(k,dic[k])
- # print(dic2)
创建字典的 3 种方法 (面试题)
- dic1={}
- dic2=dict()
3.dic3=dict.fromkeys(['key1','key2','key3'],[ ]) fromkeys 后面加可迭代数据
- # dic3=dict.fromkeys(['key1','key2','key3'],[])
- # dic3['key1']='alex'
- # print(dic3)
- #{'key1': 'alex', 'key2': [], 'key3': []}
区分:
- # dic3=dict.fromkeys(['key1','key2','key3'],[])
- # dic3['key1'].append('1')
- # print(dic3)
- #{'key1': ['1'], 'key2': ['1'], 'key3': ['1']}
- dic4=dict.fromkeys(['key1','key2','key3'],'alex')
- dic3=dict.fromkeys(['key1','key2','key3'],'egon')
- print(dic3)
- #{'key1': 'egon', 'key2': 'egon', 'key3': 'egon'}
集合:
集合的创建:
- set1={1,2,3}
- set2=set()
特点:
集合本身是可变数据类型 frozenset(set1): 冻集合, 可以做字典的键
集合里面的元素必须是不可变数据类型
集合是无序的
集合天然去重 (面试题)
- # 方法 1: 利用 set 去重
- list1=['alex','egon',1,'alex']
- set1=set(list1)
- list1=list(set1)
- print(list1)
- # 方法 2: 利用 for 循环去除
- list1=['alex','egon',1,'alex']
- list2=[]
- for i in list1:
- if i not in list2:
- list2.append(i)
- print(list2)
集合的增和删
增:
add
update 相当于 list 的 extend
删:
remove 按元素删
pop 随机删
clear 清空
del 内存级别删
数据类型之间的相互转换:
- 1.
- str-->list : split()
list-->str : join 列表里只能由字符串类型的数据, 有其他类型的数据会报错
- list1=['alex','egon','alex']
- s='_'.join(list1)
- print(s)
- 2.
- dict-->list:
- list(dic.keys())
- list(dic.values())
- list(dic.ites())
- list-->dict:
列表不能转换为字典
- 3.
- tuple-->list: list1=list(set())
- list-->tuple: tuple1=tuple(list())
赋值 = 与深浅 copy:
赋值 = : 数据一样, id 也一样
浅 copy: 数据一样, 里层的 id 一样, 最外层的 id 不一样 (int str bool 类型没有浅 copy)
- list1=[1,2,3]
- list2=list1.copy()
- print(id(list1),id(list2))
- print(id(list1[0]),id(list2[0]))
- #1866482736328 1866482736264
- #1887330528 1887330528
深 copy: 数据一样, 里层外层的 id 都不一样 (int str bool 类型有深 copy 但 id 不变)
- import copy
- list1=[1,2,3]
- list2=copy.deepcopy(list1)
- print(id(list1),id(list2))
- print(id(list1[0]),id(list2[0]))
关于一些关键字后面加可迭代对象
- enumerate
- ' '.join()
for 循环
来源: http://www.bubuko.com/infodetail-2741348.html