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二:基本数据 ...
随机推荐
- pytest--配置
说到配置,大家可能想到的是不经常更改的内容,比如Django里的settings.py文件,或者我们做自动化的时候,把测试环境的域名和正式环境的域名放到一个配置文件里,所有的接口都从这个文件里读取.这 ...
- glade No package 'libxml-2.0' found
------------恢复内容开始------------ 今天突发奇想 root@Aja:~/下载/libxml2-master# glade 不会用纳 百度一下——————————>> ...
- Exception "java.lang.ClassNotFoundException: com/intellij/codeInsight/editorActions/FoldingData"while constructing DataFlavor for: application/x-java-jvm-local-objectref; class=com.intellij.codeInsigh
java.lang.ClassNotFoundException in matlabR2014a 就是MATLAB和pycharm不能同时运行.关闭pycharm然后打开MATLAB就可以了.
- Python爬取糗事百科示例代码
参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...
- Django常用知识整理
Django 的认识,面试题 1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全 ...
- JS分类选择插件
需要做一个选择分类工具,大致要求如下: 点击按钮,显示一级分类,指向某个一级分类显示对应二级分类,分类有几层不定. 只能选择最后一个分类,然后把分类的ID 传值给按钮的value 我的思路: 1.后台 ...
- (二十)golang--变量的作用域
(1)函数内部申明/定义的变量叫局部变量,作用域仅限于函数的内部: (2)函数外部申明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域是整个程序: (3)如果变量是在一个代码 ...
- .NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结
.NET Core 多框架支持(net45+netstandard20)实践中遇到的一些问题总结 前言 本文主要是关于.NET Standard 代码 在多框架 和 多平台 支持自己实践过程中遇到的一 ...
- nginx代理tcp请求
1.概述 ngx_stream_core_module 这个module在nginx1.90后开始支持.开启nginx的tcp代理支持--with-stream=dynamic --with-stre ...
- git 创建标签 tag
1. git tag <name>就可以打一个新标签 加上-a参数来创建一个带备注的tag,备注信息由-m指定.如果你未传入-m则创建过程系统会自动为你打开编辑器让你填写备注信息. git ...