python27期day07:基础数据类型补充、循环删除的坑、二次编码、作业题。
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'\xe4\xbd\xa0\xe5\xa5\xbd'
你好
作业题:
# 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'\xe5\xae\x9d\xe5\x85\x83\xe6\x9c\x80\xe5\xb8\x85'
# 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)
python27期day07:基础数据类型补充、循环删除的坑、二次编码、作业题。的更多相关文章
- python基础数据类型补充
python_day_7 一. 今日主要内容: 1. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把 ...
- Python基础数据类型补充及深浅拷贝
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷贝主要内容:一. 基础数据类型补充首先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的自己看一看就可以了.我们补充给一 ...
- python基础(9):基本数据类型四(set集合)、基础数据类型补充、深浅拷贝
1. 基础数据类型补充 li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"] s = "_&qu ...
- 基础数据类型补充 set集合 深浅拷贝
一.基础数据类型补充 1. "拼接字符串".join(可迭代对象) 可迭代对象为列表时,输出列表元素与拼接字符串的拼接 li = ['张三', '李四', '王五', '赵四'] ...
- 记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶
基础数据类型 str(字符串) str:补充方法练习一遍就行 s.capitalize() 首字母大写,其余变小写 s = 'dyLAn' print(s.capitalize()) # Dylan ...
- 基础数据类型补充,及capy daty7
1,基础数据类型,总结补充. int:bit_lenth() str: captilze() 首字母大写,其余小写. upper() 全大写. lower() 全小写. find() 通过元素找索引, ...
- 《Python》 基础数据类型补充和深浅copy
一.基础数据类型的补充 元组: 如果元组中只有一个数据,且没有逗号,则该‘元组’数据类型与里面的数据类型一致 列表: 列表之间可加不可减,可跟数字相乘 l1=['wang','rui'] l2=['c ...
- Python——基础数据类型(补充)
1.基础数据类型汇总补充 (1)小数据池: 为了节省空间,数字和字符串有,其他的没有[了解] 数字:-5---256之间的数字共用一个内存地址 #(1)i1 = i2 id(i1) == id ...
- python基础数据类型补充以及编码的进阶
一.基本数据类型的补充循环列表改变列表大小的问题#请把列表中索引为基数的元素写出l1=[1,2,3,4,5,6]for i in l1: if i%2!=0: print(i)结果:135二:基本数据 ...
随机推荐
- KPConv针对Modelnet40的分类
1. 训练样本airplane_0001.txt的可视化: 飞机尺度: 物体类别与对应标签: 2. 对训练样本进行降采样: 体素法降采样,降采样的网络大小设置为0.02m.在pycharm下面的Con ...
- luoguP3242 [HNOI2015]接水果
题意 考虑整体二分. 考虑路径\((x,y)\)被路径\((u,v)\)包含需要满足什么条件: 设\(dfn_x\)表示\(x\)的\(dfs\)序,\(low_x=dfn_x+size_x-1\), ...
- session未释放
客户反映一个关于session的bug,说有了1,2天以后,就无法登陆了. 我们这边试了好几天,都没有出现类似问题,后来没办法,只能远程开会,7点左右和他们通话,偶然发现他们居然直接关remote d ...
- MySQL实战45讲学习笔记:第二十七讲
一.一主多从的切换正确性 在前面的第24.25和26篇文章中,我和你介绍了 MySQL 主备复制的基础结构,但这些都是一主一备的结构. 大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程 ...
- mysql-新增数据库
一.新增数据库 1.检查mysql 新增数据库之前,先检查是否安装了数据库,本次我们使用的是mysql数据库,检查是否安装mysql直接使用 mysql --version即可: 显示了mysql的版 ...
- iOS13 新特性简介
目录 一.Dark Mode 暗黑模式 二.Status Bar更新 三.UIActivityIndicatorView加载视图 四.总结 一.Dark Mode 暗黑模式 1.1 iOS13推出了D ...
- C++:Special Member Functions
Special Member Functions 区别于定义类的行为的普通成员函数,类内有一类特殊的成员函数,它们负责类的构造.拷贝.移动.销毁. 构造函数 构造函数控制对象的初始化过程,具体来说,就 ...
- perf性能调优
工具准备 ubuntu:sudo apt-get install perf 嵌入式平台:下载源码编译 注意:编译过程中会有Auto-detectiing system feature的依赖库打印,注意 ...
- 解锁云原生 AI 技能|在 Kubernetes 上构建机器学习系统
本系列将利用阿里云容器服务,帮助您上手 Kubeflow Pipelines. 介绍 机器学习的工程复杂度,除了来自于常见的软件开发问题外,还和机器学习数据驱动的特点相关.而这就带来了其工作流程链路更 ...
- C# 使用Environment获取当前程序运行环境相关信息
Enviroment类和AppDomain类前者表示系统级的相关信息,后者表示应用程序级的相关信息. 我常用这两个类获取一些程序运行目录.操作系统位数等信息: string basedir = App ...