基础数据类型补充、循环删除的坑、二次编码

1、求最大位数bit_length:

a = 10      #8421       1010
print(a.bit_length())
结果:4
2、capitalize首字母变大写:
s = "alex"
b = s.capitalize()  #补充字符串是不可变数据类型、只要对数据修改了就会开辟新的空间。
print(b)
结果:Alex
3、title每个单词首字母大写:
s = "alex你wusir"
s1 = s.title()
print(s1)
结果:Alex你Wusir
4、index通过元素查找索引、查找不到时报错
s = "alex你wusir"
s1 = s.index("x")
print(s1)
结果:3
5、find通过元素查找索引、查不到时返回-1
s = "alex你wusir"
s1 = s.find("d")
print(s1)
结果:-1
6、"".join(可迭代的列表、元组):
a = "cxzczxcz"
s = "_".join(a)
print(s)
结果:c_x_z_c_z_x_c_z
7、center居中并填充:
s = "alex wusir"
s1 = s.center(20,"-")
print(s1)
结果:-----alex wusir-----
8、format按照位置格式化:
s = "alex{}wusir"
s1 = s.format("你好")
print(s1)
结果:alex你好wusir
9、format按照索引格式化:
s = "alex{0}wu{1}si{2}r"
s1 = s.format("你好","我好","大家好")
print(s1)
结果:alex你好wu我好si大家好r
10、format按照关键字格式化:
s = "alex{a}wu{c}si{b}r"
s1 = s.format(b = "你好",a = "我好",c = "大家好")
print(s1)
结果:alex我好wu大家好si你好r
#11、swapcase大小写转换:
s = "alEx"
s1 = s.swapcase()
print(s1)
结果:ALeX
12、reverse翻转:
lst = [1,2,3,4,6,5]
print(lst[::-1]) #新开辟了一个列表
lst.reverse() #原地修改
print(lst)
结果:[5, 6, 4, 3, 2, 1]

    [5, 6, 4, 3, 2, 1]

13、sort排序、默认是升序(从小到大)。

lst = [1,2,3,4,6,5]
lst.sort(reverse=True)
print(lst)
结果:[6, 5, 4, 3, 2, 1]

14、ID查看内存地址:

lst1 = [1,2,3,[4]]
lst2 = [4,5,6]
# #方法一:
# lst1.extend(lst2)
# print(lst1)
#方法二:
lst3 = lst1 * 3 #列表进行乘法时元素都是共用的
print(id(lst3[0]),id(lst3[4])) #查看ID一样是节省内存
15、面试题之列表或元组进行乘法时元素都是共用的
lst = [1,2,[]]
lst1 = lst * 3
lst1[-1].append(8)
print(lst1)
结果:[1, 2, [8], 1, 2, [8], 1, 2, [8]]

16、列表之省事和专业:

lst = []·        #省事
lst1 = list()      #专业
print(lst)
print(lst1)
17、元组多样性:
tu = (10)
tu1 = (10,)
tu2 = ()
print(tu)
print(tu1)
print(tu2)
print(type(tu))
print(type(tu1))
print(type(tu2))
结果:

10
(10,)
()
<class 'int'>
<class 'tuple'>
<class 'tuple'>

18、fromkeys批量创建键值对:

dic = {}
dic = dic.fromkeys("abc",12) #批量创建键值对 参数1:键(可迭代) 参数2:值(共用)
print(dic)
结果:{'a': 12, 'b': 12, 'c': 12}
19、列表转字典:
print(dict([(1,2),(4,5),(7,8)]))
结果:{1: 2, 4: 5, 7: 8}
20、基础数据类型总结:
      有序无序          是否可变      是否迭代          取值方式
int    有序(不支持索引)     不可变        不可迭代          直接查看
bool                  不可变        不可迭代          直接查看
str    有序(支持索引)      不可变        可迭代            通过索引查看
list    有序(支持索引)      可变         可迭代            通过索引查看
tuple   有序(支持索引)      不可变        可迭代            通过索引查看
dict    无序(不支持索引)     可变         可迭代            通过键查看
set    无序(不支持索引)     可变         可迭代            直接查看
21、循环删除的坑:
投机取巧型:
lst = [11,22,33,44,55]
for i in lst:
lst.clear()
print(lst)
结果:[]
remove型:for循环有自主计数功能、列表有自动补位功能。
lst = [11,22,33,44,55]
for i in lst:
lst.clear()
print(lst)
结果:[22, 44]
range删除:
lst = [11,22,33,44,55]
for i in range(len(lst)): #用range定好范围
lst.pop(0)
print(lst)
结果:[]
copy删除:
lst = [11,22,33,44,55]
lst1 = lst.copy()
for i in lst1:
lst.remove(i)
print(lst)
结果:[]
字典:
字典大小说的是字典的长度、长度就是键值对的个数。
不能修改键值对的大小、但是能修改键对应的值。
dic = {"key":1,"key2":2}
for i in dic:
dic[i] = i + "1"
print(dic)
结果:{'key': 'key1', 'key2': 'key21'}
删除字典中的键值对:
dic = {"key":1,"key2":2}
dic1 = dic.copy()
for i in dic1:
del dic[i]
print(dic)
结果:{}
删除集合中的元素:
s = {1,2,3,5,6}
s1 = s.copy()
for i in s1:
s.remove(i)
print(s)
结果:set()
把索引为奇数的删除:
方法一:
lst = [11,22,33,44,55,66]
lst1 = lst.copy()
for i in lst1:
if lst1.index(i) % 2 == 1:
lst.remove(i)
print(lst)
结果:[11, 33, 55]
方法二:
del lst[1::2]
print(lst)
结果:[11, 33, 55]
作业题:
ascii英文、数字、符号
  英文:1个字节、8位
gbk:英文、数字、符号、中文
  英文:1个字节、8位
  中文:2个字节、16位
Unicode:英文、数字、符号、中文
  英文:4个字节、32位
  中文:4个字节、32位
utf-8:英文、数字、符号、中文
  英文:1个字节、8位
  欧洲:2个字节、16位
  亚洲:3个字节、24位
python3内存中使用的就是Unicode、万国码、不断的使用回收、硬盘中存储时选择的编码方式gbk和utf-8。
以什么编码就以什么解码:
s = "你好"
s1 = s.encode("utf-8")
print(s1)
s2 = s1.decode("utf-8")
print(s2)
结果:b'xe4xbdxa0xe5xa5xbd'

    你好

作业题:

# 1.看代码写结果
v1 = [1,2,3,4,5]
v2 = [v1,v1,v1]
v1.append(6)
print(v1)
print(v2)
# 结果:[1, 2, 3, 4, 5, 6]
# [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]]
# 2.看代码写结果
v1 = [1,2,3,4,5]
v2 = [v1,v1,v1] #v2 = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
v2[1][0] = 111 #v2 = [[111,2,3,4,5],[111,2,3,4,5],[111,2,3,4,5]]
v2[2][0] = 222 #v2 = [[222,2,3,4,5],[222,2,3,4,5],[222,2,3,4,5]]
print(v1)
print(v2)
# 结果:[222, 2, 3, 4, 5] #赋值是两个或多个变量名指向同一个内存地址、有一个操作内存地址的值进行改变、其余的变量名在查看的时候都进行更改
# [[222, 2, 3, 4, 5], [222, 2, 3, 4, 5], [222, 2, 3, 4, 5]]
# 3.看代码写结果,并解释每一步的流程。
v1 = [1,2,3,4,5,6,7,8,9]
v2 = {}
for item in v1:
if item < 6:
continue
if 'k1' in v2:
v2['k1'].append(item)
else:
v2['k1'] = [item ]
print(v2)
# 结果:{'k1': [6, 7, 8, 9]}
# 4.简述赋值和深浅拷贝?
# 赋值:多个变量名指向同一个内存地址。
# 浅拷贝:只拷贝第一层的元素内存地址、可变和不可变的数据都是共用的。
# 深拷贝:对于不可变的数据、元素是共用的、可变的数据、开辟新的空间、不管嵌套多少层。
# 5.看代码写结果
import copy
# num1 = 1
# num2 = copy.copy(num1)
# num3 = copy.deepcopy(num1)
# print(num1 is num2)
# print(num1 is num3)
# v1 = "alex"
# v2 = copy.copy(v1)
# v3 = copy.deepcopy(v1)
# print(v1 is v2)
# print(v1 is v3) #小数据池包含数字、字符串、布尔值.
# bool1 = True
# bool2 = copy.copy(bool1)
# bool3 = copy.deepcopy(bool1)
# print(bool1 is bool2)
# print(bool1 is bool3)
# 结果:True
# True
# 6.看代码写结果
import copy
v1 = [1,2,3,4,5]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)
print(v1 is v2)
print(v1 is v3) #小数据池不包含列表
# 结果:False
# False
# 7.看代码写结果
import copy
v1 = [1,2,3,4,5]
v2 = copy.copy(v1) #[1,2,3,4,5]
v3 = copy.deepcopy(v1) #[1,2,3,4,5]
print(v1[0] is v2[0])
print(v1[0] is v3[0])
print(v2[0] is v3[0])
# True
# True
# True
# 8.看代码写结果
import copy
v1 = [1,2,3,4,[11,22]]
v2 = copy.copy(v1) #浅拷贝是拷贝了一个空盒子、里面的元素还是原列表里面的元素
v3 = copy.deepcopy(v1) #深拷贝也是拷贝了一个空盒子、里面的不可变数据类型共用、可变数据类型新开盒子【11,22】
print(v1[-1] is v2[-1])
print(v1[-1] is v3[-1])
print(v2[-1] is v3[-1])
#True
# False
# False
# 9.看代码写结果
import copy
v1 = [1,2,3,{"name":'太白',"numbers":[7,77,88]},4,5]
v2 = copy.copy(v1) #因为是浅拷贝里面的元素都复制[1,2,3,{"name":'太白',"numbers":[7,77,88]},4,5]
print(v1 is v2) #答案是False、因为列表是新开的、小数据池只包含数字、字符串、布尔值、不包含列表、驻留机制是长得像的共用一个内存地址、
print(v1[0] is v2[0]) #答案是True、因为用的都是浅拷贝
print(v1[3] is v2[3]) #答案是True、因为用的都是浅拷贝
print(v1[3]['name'] is v2[3]['name']) #答案是True、因为用的都是浅拷贝
print(v1[3]['numbers'] is v2[3]['numbers']) #答案是True、因为用的都是浅拷贝
print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) #答案是True、因为用的都是浅拷贝
#False
# True
# True
# True
# True
# True
# 10.看代码写结果
import copy
v1 = [1,2,3,{"name":'太白',"numbers":[7,77,88]},4,5]
v2 = copy.deepcopy(v1) #【1,2,3,{"name":'太白',"numbers":【7,77,88】},4,5】
print(v1 is v2) #深拷贝是遇到不可变数据类型、元素是共用的、可变数据类型、新开辟空间、不管嵌套多少层、深拷贝只要遇到可变数据类型就开辟空间、不管嵌多少层
print(v1[0] is v2[0]) #T
print(v1[3] is v2[3]) #F
print(v1[3]['name'] is v2[3]['name']) #T
print(v1[3]['numbers'] is v2[3]['numbers']) #F
print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) #T
# False
# True
# False
# True
# False
# True
# 11.请说出下面a,b,c三个变量的数据类型。
a = ('太白金星') #字符串
b = (1,) #元组
c = ({'name': 'barry'}) #字典
# 12、按照需求为列表排序:
l1 = [1, 3, 6, 7, 9, 8, 5, 4, 2]
# 从大到小排序
l1.sort(reverse=True)
print(l1)
# 从小到大排序
l1.sort()
print(l1)
# 反转l1列表
l1.reverse()
print(l1)
# 13.利用python代码构建一个这样的列表(升级题):
[['_','_','_'],['_','_','_'],['_','_','_']]
print([list("___")] * 3)
# 14.看代码写结果:
l1 = [1,2,]
l1 += [3,4]
print(l1)
# 结果:[1, 2, 3, 4]
# 15.看代码写结果:
dic = dict.fromkeys('abc',[])
dic['a'].append(666)
dic['b'].append(111)
print(dic)
# 结果:{'a': [666, 111], 'b': [666, 111], 'c': [666, 111]}
# 16.l1 = [11, 22, 33, 44, 55],请把索引为奇数对应的元素删除
l1 = [11, 22, 33, 44, 55]
l11 = l1.copy()
for i in l11:
if l11.index(i) % 2 == 1:
l1.remove(i)
print(l1)
# 结果:[11, 33, 55]
# 17.dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18} 请将字典中所有键带k元素的键值对删除.
dic = {'k1': '太白', 'k2': 'barry', 'k3': '白白', 'age': 18}
for key in list(dic.keys()): # ['k1', 'k2', 'k3','age']
if 'k' in key:
dic.pop(key)
print(dic)
# 18.完成下列需求:
s1 = '宝元'
# 将s1转换成utf-8的bytes类型。
s1 = '宝元'
s1 = s1.encode("utf-8")
print(s1)
s1 = s1.decode("utf-8")
print(s1)
# 将s1转化成gbk的bytes类型。
s1 = s1.encode("gbk")
print(s1)
b = b'xe5xaex9dxe5x85x83xe6x9cx80xe5xb8x85'
# b为utf-8的bytes类型,请转换成gbk的bytes类型。
b = b.decode("utf-8")
print(b)
b = b.encode("gbk")
print(b)
# 19、用户输入一个数字,判断一个数是否是水仙花数。
# 水仙花数是一个三位数, 三位数的每一位的三次方的和还等于这个数. 那这个数就是一个水仙花数,
# 例如: 153 = 1**3 + 5**3 + 3**3 #1+125+27
#版一
num_sum = 0
num = input("请输入水仙花数字:")
for i in num:
num_sum += int(i) ** 3
if int(num) == num_sum:
print("是水仙花")
else:
print("不是水仙花")
#版二、三元运算
num_sum = 0
num = input("请输入水仙花数字:")
for i in num:
num_sum += int(i) ** 3
print("是水仙花" if num_sum == int(num) else "不是水仙花")
# 20、把列表中所有姓周的⼈的信息删掉(此题有坑, 请慎重):
# lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
#版一、在某某里面
lst = ['周⽼⼆', '周星星', '麻花藤', '周扒⽪']
lst1 = lst.copy()
for i in lst1:
if "周" in i:
lst.remove(i)
print(lst)
#版二、用索引开头判断
lst1 = lst.copy()
for i in lst1:
if i[0] == "周":
lst.remove(i)
print(lst)
# 结果: lst = ['麻花藤']
# 21、车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (选做题)
cars = ['鲁A32444','鲁B12333','京B8989M','⿊C49678','⿊C46555','沪 B25041']
locals = {'沪':'上海', '⿊':'⿊龙江', '鲁':'⼭东', '鄂':'湖北', '湘':'湖南'}
# 结果: {'⿊龙江':2, '⼭东': 2, '上海': 1}
dic = {}
for i in cars:
key = i[0]
if key in locals:
dic[locals[key]] = dic.get(locals[key],0) + 1
print(dic)
原文地址:https://www.cnblogs.com/zhang-da/p/11609584.html