day02 python数据类型
python里面常见的数据类型
目录
一、int 整形只有一个方法bit_length() 可以显示二进制长度
a = 10
b = a.bit_length()
print(b)
1010
二、bool
bool -> 数据类型之间的转化(记结论)
int(字符串) => 把字符串转化成数字
str(数字) => 把数字转化成字符串
结论1: 想要把x变成y y(x)
结论2: 所有的空都表示False, 所有的非空都表示True
三、string
字符串的索引
程序员数数从0开始
字符串[索引]
切片:
字符串[start:end] 从start到end拿到数据. end取不到
daily = "周一周五上班周末上课,干不完的活还有堆学不会的东西并且还有一些额外的烦恼,so我们要学会调整自己"
print(daily[0:5])
ps: 如果想取到第六个值那么需要把end往后加一(俗话称顾头不顾尾)
字符串[start:end:step] 从start到end拿数据. 每step个拿出来一个.
daily = "周一周五上班周末上课,干不完的活还有堆学不会的东西并且还有一些额外的烦恼,so我们要学会调整自己"
print(daily[::2])
按照步长切片
step:
+ 左到右
daily = "周一周五上班周末上课,干不完的活还有堆学不会的东西并且还有一些额外的烦恼,so我们要学会调整自己"
print(daily[0:10:2])
- 右到左
daily = "周一周五上班周末上课,干不完的活还有堆学不会的东西并且还有一些额外的烦恼,so我们要学会调整自己"
print(daily[10:0:-2])
方法:capitalize() 标题第一个英文单词首字母大写
title = "today is monday"
print(title.capitalize())
方法:upper()全部字母大写
title = "today is monday"
print(title.upper())
验证码例子:
verify_code = input("请输入AppLy: ")
verify_code1 = "AppLy"
if verify_code.upper() == verify_code1.upper():
print("正确")
else:
print("错误")
方法:lower()把字母转成小写
title = "TODAY IS monday"
print(title.lower())
方法:center()把字符串拉长成10个单位,让原来的字符串居中
name = "张无忌"
name1 = name.center(10,"?")
print(name1)
方法:expandtabs()改变tab的 长度
greating = "你好啊、\t 我叫ivy wang"
print(greating.expandtabs(30))
方法:strip()去掉字符串两边的空白,lstrip() 去掉左边 rstrip()去掉右边。
s = " what's your name "
print(s.strip())
方法repalce() 替换字符串
s = "I need a pen"
print(s.replace("need","want"))
方法:split() 以什么为分隔符切割,切割出来的结果是列表的形式
s = "北京#朝阳#丰台#东城#西城"
s2 = print(s.split("#"))
方法:startswith()以什么开头,endswith()以什么结尾。 ps:主要做判断用结果会返回True或者False
print(s.startswith("python"))
print(s.endswith("语言"))
方法:conut()统计字符串里某个字符出现的次数
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
print(s.count("生"))
方法:find()返回索引如果没有返回-1
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
print(s.find("爱"))
方法index()返回索引如果没有则报错
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
print(s.index("可"))
方法:isalpha() 判断是不是字母
s = "1234"
print(s.isalpha())
方法:isdigit() 判断是不是阿拉伯数字
s = "1234"
print(s.isdigit())
方法:isalnumberic()判断是不是字母和阿拉伯数字
s = "1234aaa"
print(s.isalnum())
方法:len()内置函数和print类似,主要用来查看字符串长度
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
print(len(s))
小例子:用for循环来遍历字符串
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
for i in s:
print(i)
index = 0
s = "生命诚可贵,爱情价更高,若为自由故,两者皆可抛。生命高于爱情还是爱情高于生命"
while index <= len(s):
print(s[index])
index += 1
四、列表
列表的定义: list = [ ] ps:用中括号来表示
lst = ["name","age","address","habby","number"]
print(lst)
ps:索引跟字符串类似
添加一:append() 默认从末尾插入
lst = ["name","age","address","habby","number"]
lst.append("job")
print(lst)
添加二:insert() 指定索引添加
lst = ["name","age","address","habby","number"]
lst.insert(1,"firsr_name")
print(lst)
添加三:extend()把元素拆开进行迭代添加
lst = ["name","age","address","habby","number"]
lst.extend("second_name")
print(lst)
删除一:pop()默认从末尾删除,也可以指定索引删除
lst = ["name","age","address","habby","number"]
lst.pop()
print(lst)
lst = ["name","age","address","habby","number"]
lst.pop(1)
print(lst)
删除二: remove()指定元素删除
lst = ["name","age","address","habby","number"]
lst.remove("age")
print(lst)
删除三: del() 指定下标删除
lst = ["name","age","address","habby","number"]
del lst[2]
print(lst)
删除四: clear()删除全部。 ps:一般不建议使用这个方法
lst = ["name","age","address","habby","number"]
lst.clear()
print(lst)
修改:使用索引去修改
lst = ["name","age","address","habby","number"]
lst[0] = "firstname"
print(lst)
把name变成大写的
lst = ["name","age","address","habby","number"]
lst[0] = "firstname".upper()
print(lst)
小例子:让用户输入一个加法运算: 3+8+4+6+9 想办法完成数学运算
Sum = 0
s = "3+8+4+6+9"
verify_code = input("请输入3+8+4+6+9的和: " )
s1 = s.split("+")
for item in s1:
Sum += int(item)
if verify_code == Sum:
print("正确")
else:
print("失败")
列表排序
lst = [99,1,101,88,78]
lst.sort(reverse=False)
print(lst)
倒序
lst = ["香蕉","苹果","西瓜"]
lst.reverse()
print(lst)
查询:查询的方法跟字符串的一样
直接用索引查找和使用for循环可以遍历列表
五、元组元组(tuple): 不可变的列表, 只读列表
放一些不进行修改的数据
元组用()表示.
空元组必须用tuple()来创建
小知识点: 如果元组只有一个元素. 必须在末尾添加一个逗号
定义空元组:
t = tuple()
print(t)
按步长查看元组元素
t = ("哈哈", "周杰伦", "爱上了", "冯提莫")
print(t[1::2])
for循环遍历
for i in t:
print(i)
元组里面的列表可以追加元素
t = ("张无忌", "张大大", ["呵呵", "哈哈", "吼吼"], "张伯伦")
t[2].append("牛A") # 元组的不可变指的是内存指向的不可变
print(t)
把元组赋值给其他变量对原来的元组的列表进行修改
t = ("张无忌", "张大大", ["呵呵", "哈哈", "吼吼"], "张伯伦")
t1 = t[2][1] = "嘻嘻"
print(t1)
定义元组时注意事项
t = (1) # 此时的小括号表示优先级并不是元组
print(type(t))
print(t)
t = (1,) # 当定义一个元组的时候需要加逗号来标识
print(type(t))
print(t)
六、字典
查询速度快
在存储数据的时候必须使用key:value的形式进行存储,
key不可以重复.
并且要求key必须可哈希-> 不可变(int, str, tuple, bool, float)
value没有要求
新增一:直接用新key添加
dic = {"name":"汪峰"}
print(type(dic))
定义一个空字典
dic1 = {}
在已有的字典里面继续添加
dic = {"name":"汪峰","wife":"章子怡"}
dic["赵本山"] = "刘老根"
print(dic)
已经存在的key不可以修改key的value
dic = {"name":"汪峰","wife":"章子怡"}
dic["赵本山"] = "刘老根"
print(dic)
dic["赵本山"] = "阿水" # key 不可以重复. 会把数据覆盖掉
方法:setdefault() 当key在字典中存在的时候, 不执行新增。当key不存在的时候. 执行新增操作。不论新增与否. 执行完新增流程之后. 使用key把value查询出来
dic = {"name":"汪峰","wife":"章子怡"}
dic.setdefault("job","actor")
print(dic)
setdefault应用小例子 把[11,22,33,44,55,66,77,88] 大于66的放到key2 小于66的放到key1
lst = [11,22,33,44,55,66,77,88]
dic = {}
for item in lst:
if item < 66:
if dic.get("key2") != None:
dic["key2"].append(item)
else:
dic['key2'] = []
dic['key2'].append(item)
#dic.setdefault("key2", []).append(item)
else:
if dic.get("key1") != None:
dic["key1"].append(item)
else:
dic['key1'] = []
dic['key1'].append(item)
#dic.setdefault("key1", []).append(item)
print(dic)
lst = [11,22,33,44,55,66,77,88]
dic = {}
for item in lst:
if item < 66:
dic.setdefault("key2", []).append(item)
else:
dic.setdefault("key1", []).append(item)
print(dic)
查询数据的方法
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
print(dic.get("意大利")) ps:查询不到结果时候返回none
查不到结果的时候会报错
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
print(dic["意大利亚"])
只能查key
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
for item in dic:
print(item)
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
for k in dic.keys():
print(k)
只能查value
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
for v in dic.values():
print(v)
key和value一并查询
dic = {
"name":"Ivy","national":["中国","美国","英国"]
}
for k,v in dic.items():
print(k,v)
解构,解包
a, b = (1, 2)
print(a,b)
字典嵌套小例子:
wangfeng = {
"name":"汪峰",
"age":45,
"job":"singer",
"wife":{
"name":"章子怡",
"job":"actress",
"habby":["汪峰","当导师"]
},
"chidren":[
{ "name":"大娃","age":10},
{"name":"二娃","age":5},]
}
print(wangfeng)
查询his wife's job
print(wangfeng['wife']["job"])
把汪峰第三个孩子的年龄增加10
(wangfeng['chidren'][1]["age"]) = wangfeng['chidren'][1]["age"] + 10
print(wangfeng)
追加元素
wangfeng["wife"]["habby"].append("上课看小说")
print(wangfeng)
删除key
删除:
1. pop(key) 指定key删除
2. popitem() 删除最后一个.
3. del dic[key]
4. clear()
修改:
dic[老key] = 新value
查询:
get(key) 使用key获取value
dic[key] 查询, 如果key不存在. 会报错
循环:
for k in dic:
k
dic[k]
for k, v in dic.items():
print(k)
print(v)
九. 知识点补充
1. range:range让for循环数数
for i in range(10): # 从0到9
print(i)
for i in range(10, 20): # 10-19
print(i)
for i in range(10, 20, 2): # 10 12 14 16 18
print(i)
lst = ["手机","callji","lunchuan","dnfyouxibi","有课一乐",11111,111111111111]
for i in range(len(lst)): # 遍历列表, 可以拿到索引和元素
print(i+1, lst[i])
2. join:把列表中每一项拼接起来
s = "_sb_".join(["alex", "太白", "太黑", "太绿"]) #把列表中每一项拼接起来
print(s)
s1 = "alex_sb_太白_sb_太黑_sb_太绿"
print(s1.split("_sb_"))
3. while...else
count = 1
while count<= 10:
if count == 7:
break
print(count)
count += 1
else: # 必须是while条件不成立的时候. 才会执行else
print("wo shi else")
4. for循环的时候不要删除列表中的内容
这种删除方法会错位所以有一个元素删不掉
lst = ["张无忌", "张国荣", "张三丰", "武则天", "秦始皇"]
for item in lst:
if item.startswith("张"): # 判断是否姓张
for item in lst:
lst.remove(item)
print(lst)
这种办法可以删掉
lst = ["张无忌", "张国荣", "张三丰", "武则天", "秦始皇"]
new_lst = [] # 小本本
for item in lst:
if item.startswith("张"): # 判断是否姓张
# 删除这个人
new_lst.append(item)
for item in new_lst:
lst.remove(item)
print(lst)
欠的: 小数据池 is和==区别, 深浅拷贝, set集合
补充1:小数据池理论
小数据池的作用:为了减轻内存的负担, 重复的使用同一个数据。会存储我们常用的一些字符,主要存储的类型如下:
1. int -5 ~ 256
2. 常用的字符串
3. bool True和FALSE
补充二:id, is, ==
id: 查看两个变量是否指向同一个内存地址
is: 判断两个内存地址是否是一个,如果是返回True 否则返回False.
== : 判断等号两边的数值是否相等。
补充三:set集合
类似字典,但是set只存放key,可哈希,不可变,无重复,无序。(帮助去重)
添加:add()
删除:remove()
没有修改
for循环查询
补充四:深浅拷贝
拷贝的意义:快速的创建对象、克隆。
浅拷贝:只拷贝第一层内容,复制一个表面。更深层次的内容只拷贝一个内存地址。
方法一:copy
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
print(id(list1))
list2 = list1.copy()
print(id(list2))
方法二:通过切片的方式
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
print(id(list1))
list2 = list1[:]
print(id(list2))
ps:对于浅拷贝而言,当你修改列表里嵌套的字符时,拷贝过去的那一份数据也会发生变化,原因是它的指向实际上只是一个内存地址
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
list2 = list1[:]
list1[2][0] = "rice5"
print(list1)
print(list2)
深拷贝特点:把内容完全的复制一份
1.import os
2.copy.deepcopy()
import copy
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
list2 = copy.deepcopy(list1)
print(list1)
print(list2)
此时内存地址完全是不一样的,也就意味着不管怎么修改list1 list2都不会发生改变。
import copy
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
list2 = copy.deepcopy(list1)
print(id(list1[2]))
print(id(list2[2]))
注意:赋值操作不会创建新对象,此时内存地址也是一样的。
list1 = ["apple", "orage",["rice", "soup", "sweet"] ,"bananan"]
list2 = list1
print(id(list1))
print(id(list2))
print(id(list1[2]))
print(id(list2[2]))