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二:基本数据 ...
随机推荐
- 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)
线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...
- Unity 2018 Artificial Intelligence Cookbook Second Edition (Jorge Palacios 著)
https://github.com/PacktPublishing/Unity-2018-Artificial-Intelligence-Cookbook-Second-Edition 1 Beha ...
- Asp.Net Core 工作单元 UnitOfWork UOW
Asp.Net Core 工作单元示例 来自 ABP UOW 去除所有无用特性 代码下载 : 去除所有无用特性版本,原生AspNetCore实现 差不多 2278 行代码: 链接:https://pa ...
- 《Linux内核原理与分析》教学进程
目录 2019-2020-1 <Linux内核原理与分析>教学进程 考核方案 第一周: 第二周: 第三周: 第四周: 第五周 第六周 第七周: 第八周 第九周 第十周 第十一周: 第十二周 ...
- Kubernetes生产架构浅谈
注意 本文,只是笔者针对Kubernetes生产环境运行的一些关于架构设计介绍. 介绍 基于 Kubernetes 系统构建的统一开发运维管控平台.在 Kubernetes 基础上,围绕 微服务系统的 ...
- python threading ThreadPoolExecutor
线程池,为什么要使用线程池:1. 线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值2. 当一个线程完成的时候我们主线程能立即知道3. futures可以让多线程和多进程编码接口一致 获取 ...
- [转]WPF入门教程系列
转载自:https://www.cnblogs.com/chillsrc/category/684419.html 谢谢浏览!
- 『Exclusive Access 2 dilworth定理 状压dp』
Exclusive Access 2 Description 给出 N 个点M 条边的无向图,定向得到有向无环图,使得最长路最短. N ≤ 15, M ≤ 100 Input Format 第一行一个 ...
- 2018-8-10-WPF-checkbox文字下掉
原文:2018-8-10-WPF-checkbox文字下掉 title author date CreateTime categories WPF checkbox文字下掉 lindexi 2018- ...
- [翻译]微软 Build 2019 正式宣布 .NET 5
原文: Introducing .NET 5 今天,我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 .这将是 .NET 系列的下一个重要版本. 将来只会有一个 .NET ,您 ...