基本数据类型
基本数据类型
注意:数字,字符串,布尔值可以相互转换
如果需要把数字转换成 -字符串:str() ; -布尔值:bool(),只有0是False,其他都是True
字符串转换成-数字:int() ; -布尔值:bool(),空的是False,其他都是True
布尔值转换成-数字:int(); -字符串:str()
1, 数字 (int)
数字对应的英文是int(整型)
在python3 所有的整型都是int类型
查看具体功能可以按住ctrl(苹果:command) ,然后单击鼠标左键.
1) int 功能:
-将字符串转化为数字 具体表达为 int(x)
注意:原来的字符串内包含数字才可以转换
a = "123"
b = int(a)
print(b) ====>结果为123,
print(type(a),a)=====>输出结果为 <class "str">123 ,此处是字符串类型
print(type(b),b)=====>输出结果为 <class "int">123 ,此处是数字类型,
- 将二,八,十六进制 的数字转化成十进制并且输出。
具体代码: int(x,base=x),例如:
number = "11"
v = int (num , base=8) ======> 是指将八进制的11 转换成十进制并且输出
print(v)
输出结果是 9
int () 不加 base = ,默认是十进制
2)bit_lenght 功能
bit_length 功能表示当前的数字的二进制,至少用n位来表示.
具体代码为: x.bit_length() ,例如:
age = 12
n = age.bit_length()
print(n)
2,字符串(str)
str 与 name = "alisa" 是类与列表的关系。
字符串的英文是 str
查询有哪些功能 str.
查看具体功能可以按住ctrl(苹果:command) ,然后单击鼠标左键.
功能:
1)首字母大写 capitalize()
具体表达为x.capitalize() 如下:
test = "alisa"
v = test.capitalize()
print(v)
输出结果为:Alisa
2) 全部小写
casefold() **casefold 更牛逼,对于未知的相对应变小写也可以输出
具体代码为:x.casefold()
例如:
test = "Alisa"
v = test.casefold()
print(v)
输出结果为:alisa
*lower()
具体代码为:x.lower()
例如:
test = "Alisa"
v = test.lower()
print(v)
*3)全部大写upper()
代码为:x.upper()
test = "abc"
v1 = test.upper()
print(v1)===>结果为:ABC
4)设置宽度,
-并将内容并居中
center()
具体代码:X.center
查看功能具体如下图:
例如:
test = "lisa"
v = test.center(10,"*")
print(v)
输出结果为: ***lisa***
其中10代表宽度(必须写上),*代表空白未知填充,但是只能写一个字符,此处可有可无
-设置宽度,将内容居左 ljust()
代码:x.ljust()
test = "你好吗陈?"
v1 = test.rjust(12,"*")
print(v1)====结果为:你好吗陈?*******
-设置宽度,将内容具右rjust()
代码:x.rjust()
test = "你好吗陈?"
v1 = test.ljust(12,"*")
print(v1)====结果为:*******你好吗陈?
5) 去字符串中寻找,寻找子序列(子字符串)出现的次数。
count(self, sub, start=None, end=None): 注意:其中end代表的是 <end, start 代表>=start,位置从0位开始数
具体代码如下:x.count()
其中sub必须写上内容,start 和 end 可写可不写。 start 代表起始位置,end 代表结束位置。
例如:
test = "lisalisa"======>"lisalisa"对应的位置为:
01234567
v = test.count("sa",5,8) =======>指从第5位开始到第8位包含sa 几次===>第5位是i,第7位是a,到第7为完结===>所以包含sa一次,所以输出结果为1
print(v)====>输出结果为:1
6) encode(self, *args, **kwargs)
python3默认编码为unicode,由str类型进行表示。二进制数据使用byte类型表示。
字符串通过编码转换成字节码,字节码通过解码成为字符串
encode:str --> bytes
decode:bytes --> str
7)decode
*8) 以什么结尾。
endswith(self, suffix, start=None, end=None),注意:其中end代表的是 <end, start 代表>=start,位置从0位开始数
代码:x.endswith()
其中start 指从哪里开始,end指到哪里结束 (可写可不写,不写代表默认)
例如:
test = "lisalisa"
v = test.endswith("sa",1,4)
print(v) =========>结果是:True
****************************
test = "lisalisa"
v = test.endswith("sa",1,5)
print(v)==========>结果是:False
*9)以什么开始
startswith(self, prefix, start=None, end=None) 同上endswith 注意:其中end代表的是 <end, start 代表>=start,位置从0位开始数
代码: x.startswith()
test = "lisalisa"
v = test.startswith("i",1,2)==>指从第1位到第2位的子字符串(子序列)是以"i"开始的。
print(v)
输出结果为:True
10) 分割 字符串 expandtabs() ,遇到tab会自动空格补全 补充: \t ====>代表制表符
代码为:x.expandtabs()
expandtabs()代表几个字符串进行分割。例如:expandtabs(6) 代表6个字符分割成一个子字符串
例如:
test = "我的\t9900\t11"
v = test.expandtabs(6)====>每6个分割一次
print(v,len(v))========>len()是计算字符串的长度
输出结果为:我的 9900 11 14 ====>分析: 我的==2个,遇到\t自动补全,所以补充4个空格。最终一共有14个字符
*****************************************************
test = "username\tpassword\te-mail\nalisa\t123\tasd@qq.com\nalisa\t123\tasd@qq.com\nalisa\t123\tasd@qq.com"====>\n表示换行
v = test.expandtabs(15)
print(v)
输出结果为:username password e-mail
alisa 123 asd@qq.com
alisa 123 asd@qq.com
alisa 123 asd@qq.com
*11) find 从开始往后找,找到第一个后,获取其位置,如果没有,显示-1
find(self, sub, start=None, end=None) 注意:其中end代表的是 <end, start 代表>=start,位置从0位开始数
代码:x.find(),如果找不到,会显示负数。
例如:
test = "lisalisa"
v = test.find("sa",2,4)===>即在第2位到第4位中间找子序列"sa"==>第2位是s,第4位是l,找到第一个获取的位置是2
print(v) ====>输出结果为: 2
*12)格式化。将一个字符串中的占位符替换成指定的值
format(self, *args, **kwargs)
代码为:x.format()
例如:
方式一:
test = "my name is {x}, age {n}"====>注意此处的x 和n必须带{}
v = test.format(x = "alisa", n = 18)
print(v)===>输出结果为:my name is alisa, age 18
方式二:
test = "my name is {0}, age {1}"====->注意必须从0开始
v = test.format("alisa", 18 ) ====> 注意按照顺序开始替换,此处alisa 替换0,18替换1
print(v) ==>输出结果为 my name is alisa, age 18
13)格式化。将一个字符串中的占位符替换成指定的值
format_map(self, mapping)
代码为:x.format_map() ,注意map后格式为({"a" : "alisa", "b" : 18})
例如:
test = "my name is {a}, age {b}"
v = test.format_map({"a" : "alisa", "b" : 18})===>注意格式
print(v)=====输出结果:my name is alisa, age 18
14)index 与find 功能一样,只是如果找不到会显示错误,一般建议使用find
15) 判断字符串中是否只包含字母和字符串/全是字母/全是字符串。
isalnum(self, *args, **kwargs)
代码为 x.isalnum()
例如:
test = "123abc"
v = test.isalnum()
print(v)===>输出结果为:True
***************************
test = "123abc_*"
v = test.isalnum()
print(v)====>输出结果为:False
16) 判断字符串中是否只包含字母(汉字)
isalpha(self, *args, **kwargs):
代码为:x.isalpha
例如:
test = "abc"
v = test.isalpha()
print(v) ===>输出结果为:True
***********************
test = "abc/"
v = test.isalpha()
print(v) ===>输出结果为:False
17)判断字符串是否只包含数字 isdecimal(),isdigit(),isnumeric()其中isnumeric()功能更强大
例如:
test = "123"
v1 = test.isdecimal()===>只能判断十进制小数
v2 = test.isdigit()===>不支持中文
v3 = test.isnumeric()===>全都可以判断
print(v1,v2,v3)
输出结果为:True True True
18)isidentifier()只要字符串符合:字母,数字,下划线(数字不能开头)就都是标识符 ,结果都是True。
例如:
test = "_123"
v = test.isidentifier()
print(v)
输出结果为:True
19)islower() 判断字符串是否全部是小写
test = "Abc"
v = test.islower()
print(v)
输出结果为:False
20)判断是否存在不可显示的字符 isprintable()
\t====>代表制表符即:tab键
\n====>代表换行
test = "Abc\tbcd"
v = test.isprintable()
print(v)===>结果为:False
*********************************
test = "Abc"
v = test.isprintable()
print(v)===>结果为True
21)判断是否全部为空格 isspace()
test = " "
v = test.isspace()
print(v)====>结果为:True
22) 判断是否为标题istitle() 代码是:x.istitle() 注意:标题中所有的单词首字母都大写
变成标题的代码是:x.title()
test = "who are you ?"
v1 = test.istitle()===>判断v1是否为标题
print(v1)====>结果是False
v2 = test.title()===>此处是将v1变成标题
print(v2)====>结果是:Who Are You ?
v3 = v2.istitle()===>判断v3是否为标题
print(v3)====>结果是True
*23)将字符中的每一个元素按照指定的分割符进行组合 join():即将每个元素用分隔符连接起来
代码:分隔符.join()
方式一:
test = "你好吗陈?"
v1 = "*".join(test)
print(v1)=======>结果为:你*好*吗*陈*?
方式二:
test = "你好吗陈?"
t = "*"
v1 = t.join(test)
print(v1)=====>结果为:你*好*吗*陈*?
如果join()括号内是列表的话,用分隔符依次连接列表中每一个元素:如下:
li = ["achnd", "hnd","sjnd"]
s = "-".join(li)
print(s)==>输出结果为:achnd-hnd-sjnd
----------------------------
l = ['1','2']
s= '\n'.join(l) #\n 是换行符
print(s)
结果如下:
1
2
24)判断是否全部是大写 isupper()
代码为:x.isupper()
test = "abc"
v1 = test.isupper()
print(v1)====>结果是:False
*25)去除左右空白,去除\t和\n 即:去除换行和制表符,以及去除指定字符。 注意:去除指定字符时会遵循有序最多匹配原则
-去除最左边和最右边空白 strip() 代码为:x.strip()
test = " 你 好 吗 "
v1 = test.strip()
print(v1)结果是:
你 好 吗
***********************
去除指定字符
test = "abcdfeg"
v1 = test.strip("acdeg")====>分析:strip是去除最左边以及最右边. 最右边有eg,所以去除,剩下abcdf,指定字符中没有f,所以右边停止去除。最左边有a所以也去除,剩下bcdf,由于指定字符中没有b,所以左边也停止去除,最后剩余bcdf.
print(v1)结果是:bcdf
-去除最左边空白lstrip()
test = " 你 好 吗 "
v1 = test.lstrip()
print(v1) 结果是:
你 好 吗
**********************************
去除指定字符
test = "abadafeg"
v1 = test.lstrip("abaf")====>分析:lstrip去除最左边,从左到右执行。从左边看最左边是aba,指定字符中有,所以去除aba,余dafeg;再从左看,指定字符中没有d,不去除;再看a,指定字符中有,所以去除a,余dafeg;由于字符串中也没d所以后边不执行,余dafeg.
print(v1)===>输出结果为dafeg
-去除最右边空白rstrip()
test = " 你 好 吗 "
v1 = test.rstrip()
print(v1)结果是:
你 好 吗
********************
去除指定字符
test = "abadafeg"
v1 = test.rstrip("egefa")==>从右往左执行,eg子字符串中有,去除eg;f,子字符串中有,去除f;a子字符串中有,去除a;d子字符串中无,停止执行,最后余abad.
print(v1)
结果为:abad
26) 对应关系并进行替换 maketrans(),translate()
maketrans("x","x") 其中("x","x") 是写对应关系。
例如:
test = "abadafegxkhuddaaebvmdnkdjiq"
x = test.maketrans("abcd","1234")===>对应关系
v =test.translate(x) ===>表示将test按照对应关系x进行转换
print(v)
结果为:12141fegxkhu4411e2vm4nk4jiq
27)分割
-进行分割并且只能分割成三份 partition(),从左到右进行分割,碰到第一个指定的分割元素就分割成三份,这三份中包含指定分割元素
代码:x.partition()
test = "absdfscds"
v = test.partition("s")
print(v)
结果为:('ab', 's', 'dfscds')
-rpsrtition() 从右边进行分割,碰到第一个指定的分割元素就分割成三份,这三份包含指定分割元素。
test = "absdfscdsd"
v = test.rpartition("s")
print(v)
结果是:('absdfscd', 's', 'd')
*-split(self, *args,**kwargs) ,可以分割成多份,多份里不出现分割元素。
*args处填写指定分割元素;**kwargs处填写分割几次,如果此处不写默认全部分割
test = "absdfscdsd"
v = test.split("s")
print(v)====>结果是['ab', 'df', 'cd', 'd']
******************************************
test = "absdfscdsd"
v = test.split("s",2)
print(v)====>结果是['ab', 'df', 'cdsd']
-rsplit() 从右往左分割成多份,不包含分割元素
test = "absdfscdsd"
v = test.rsplit("s",2)
print(v)===>结果是['absdf', 'cd', 'd']
-splitlines() 只能根据换行来分割,其中输入True / False 来保留/去除换行符号。如果不写,默认不保留换行符。注意True / False 首字母一定要大写
test = "absd\nfscdsd\nsdhgf"
v = test.splitlines()
print(v)====>['absd', 'fscdsd', 'sdhgf']
***********************************
test = "absd\nfscdsd\nsdhgf"
v = test.splitlines(True)========>True 保留换行符
print(v)=====>['absd\n', 'fscdsd\n', 'sdhgf']
27)大小写转换swapcase()
test = "Alise"
v = test.swapcase()
print(v)====>结果是:aLISE
28) zfill(宽度),原字符串靠右,左边剩余用0补齐
test = "Alisa"
v = test.zfill(12)
print(v)结果是:
0000000Alisa
*29)replace(old, new, count) 替换.
其中old是指原来的字符元素;new是指新的字符元素;count 是指替换几个,如果count 不写,默认全部替换
-全部替换,count不写。例如:
test = "alisaalisaalisaalisa"
v = test.replace("sa","xx")
print(v)=====>结果为:alixxalixxalixxalixx
-count 写具体数字。例如:
test = "alisaalisaalisaalisa"
v = test.replace("sa","xx",2)
print(v)=====>结果为:alixxalixxalisaalisa
灰魔法
*1) [] 索引 索引/下标:alisa
-通过索引/下标来获取字符串中的某一个字符。代码:x[],其中中括号中输入的是索引/下标 01234
test = "Alisa"
v = test[0]====>取变量test位置是0的索引内容
print(v)====>结果是:A
-获取切片 代码: x[x:x]
test = "Alisa"
v = test[0:-1]===>[0:-1]是大于等于0,小于-1。-1代表的是最后一个字符元素。
print(v)====>结果是:Alis
*2)len 查看当前字符串有多少个字符
test = "Alisa"
v = len(test)
print(v)
结果是:5
*3)for 循环,将对象中每个元素都进行循环
代码: for 变量名 in 字符串 :
print()====>此处是操作,任何其他操作都可以。
test = "Alisa"
for xc in test: ===>xc是自己设置的变量名
print(xc)
结果是:
A
l
i
s
a
注意:len(),索引,切片,for循环在几乎所有的数据类型都可以使用
字符串一旦创建就不可修改,一旦修改或者拼接,就会重新生成字符串
只要能被for进行循环获取,就是可迭代对象。
*4)range
-帮助创建连续数字。
test = range(100)
print(test)===>结果是:range(0, 100)
*************************************
test = range(100)===>输出内容小于100
for v in test:
print(v)
结果是:0
1
……
99
-按照步长设置不连续数字
test = range(0,100,5)===>0,100是指数字范围>=0,<=100,5是步长
for v in test:
print(v)
结果是:0
5
10
……
95
练习题
1,将输入的文字对应的索引打印出来
-使用for循环
test = input("请输入:")
print(test) ====>首先显示输入内容
l = len(test)
print(l) =====>查看输入内容的长度
===>然后需要在0-l的范围内循环
for t in range(0, l)
print(t, test[t])
简化后代码为:
test = input("请输入:")
for t in range(0, len(test)):
print(t, test[t])
结果为:
请输入:wode
0 w
1 o
2 d
3 e
-使用while循环
test = input("请输入")
count = 0
while count < len(test):
print(count, test[count])
count += 1
2,实现整数加法计算 例如:5+9 /5 +9/5+ 9
content = input("请输入内容:")
v1, v2 = content.split("+")=====>按“+”进行分割,分割完成后得到的是字符串。
v1 = int(v1.strip()) =====>字符串转换成数字
v2 = int(v2.strip())
s =v1 + v2
print(s)
3,计算用户输入内容有几个十进制小数,几个字母。
content = input("请输入内容")
number = 0
count = 0
for item in content:
if item.isnumeric() == True: =====>判断元素是否是数字
number += 1
elif item.isalpha() == True: =======>判断元素是否为字母
count += 1
print(number, count)
4,计算用户输入验证码,不区分大小写
while True:
while True:
code = check_code()
print(code)
inp = input("请输入验证码")
if inp.lower() == code.lower():====>两边同样是大写或者小写,就是表示不区分大小写
print("验证码输入成功")
break
else:
print("请重新输入")
5,在开发敏感词过滤程序,提示用户输入内容,如果输入内容包含特殊的字符如:“苍老师”,“东京热”,则将内容替换为***
li = ["苍老师","东京热"]====>列表
inp = input("请输入")
for item in li:
if item in inp:
inp = inp.replace(item,"***")
print(inp)
6,请使用代码实现:
li =["alex","eric","rain"] 利用下划线将列表的每一个元素拼接成字符串“alex_eric_rain"
v = "_".join(li)
print(v)====> 结果是:alex_eric_rain
7,制作趣味模版
需求:等待用户输入名字,地点,爱好,根据用户名字和爱好进行任意实现 如:敬爱可亲的xxx,最喜欢在xxx地方干xxx
hobby = “敬爱可亲的{0},最喜欢在{1}干{2}"
new = hobby.format("alisa","home","sleepping")
print(new)
8,制作表格
循环提示用户输入:用户名,密码,邮箱(要求用户输入长度不超过20个字符,如果超过则只有前20个字符有效)如果用户输入q或者Q表示不再继续输入,将用户输入的内容以表格形式打印
s = ""
while True:
v1 = input("请输入用户名")
v2 = input("请输入密码")
v3 = input("请输入邮箱")
mo = "{0}\t, {1}\t, {2}\n "
v = mo.format(v1, v2, v3)
s = s + v
if v1.lower() == "q":
break
print(s.expandtabs(20))
3,列表(list) 类
列表是有序的,元素是可以被修改的
灰魔法
对象:li = [xx,xx,xx]
-中括号括起来,
-中间以,分割每个元素
-可以嵌套任何类型。
-列表中元素可以是字符串,数字,列表,布尔值
-可以通过索引/切片取值
li =[12,34,56]
print(li[0])===>结果是12,索引取值
********************************
列表中嵌套列表,取嵌套列表中的元素。代码是:列表[嵌套列表所在元素的索引][嵌套列表索引][嵌套列表中元素所在索引]
li = [12, 34, [45, [29, 31], 67], 56]
需要取出29,代码如下:
v = li[2][1][0] =====>先写所在元素索引[2],然后写元素中嵌套的列表的索引[1],最后写值的索引[0]
print(v)======>结果是29,索引取值
****************
li =[12,34,56]
print(li[0:2])===切片取值,结果是[12, 34]
-for 循环
li =[12, 34, [45, 67], 56]
for item in li:
print(item)
结果是:
12
34
[45, 67]
56
-列表元素可以被修改,修改列表中元素:
注意:如果需要修改的列表元素是字符串,则不能用索引/切片直接赋值修改。ps:因为字符串一旦创建不可修改。
1)通过索引进行修改
首先用索引找到要修改的元素如li[x],然后直接赋值代码是:li[x] = ?
li =[12, 34, [45, 67], 56]
li[1] = 20
print(li)====>结果是:[12, 20, [45, 67], 56]
2)通过切片进行修改
首先先找到要修改的元素切片如li[1, 3],然后直接赋值修改代码是:li[x:x] = [?, ?]
li = [12, 34, [45, 67], 56]
li[1:3] = [20, 23]
print(li)=====>结果是:[12, 20, 23, 56]
-列表元素可以被删除。删除代码如下:
1)del 代码:del 索引 / del 切片
li =[12, 34, [45, 67], 56]
del li[1]====>删除列表li中的索引是1的元素(34)
print(li)=====>结果是:[12, [45, 67], 56]
*******************************************
li = [12, 34, [45, 67], 56]
del li[1:3]
print(li)======>结果是:[12, 56]
2) pop 删除列表某个值,并获取删除的这个值
代码:x.pop(索引位置),若索引位置不写,默认是删除最后一个元素。
li = [ 21, 34, 21, [21, 23]]
v = li.pop()
print(li)====>结果是:[21, 34, 21]
print(v)=====>结果是:[21, 23]
*********************************************************
li = [ 21, 34, 21, [21, 23]]
v = li.pop(1)
print(li)======>结果是:[21, 21, [21, 23]]
print(v)=======>结果是:34
3)remove 删除列表中的指定值,从左开始找到并删除,后边不执行(左边优先)
代码:x.remove(值)
li = [ 21, 34, 21, [21, 23]]
li.remove(21)=====从左开始,第一个就是21,直接删除然后不往下执行。
print(li)=====>结果是:[34, 21, [21, 23]]
4)clear 清空
代码:x.clear()
li = ["wode", '我们']
li.clear()
print(li)====>结果是:[]
-支持in操作 ,判断是否是列表中的元素
判断是否在列表里边(指元素),即是否是列表中的元素。
li = [12, 34, [45, 67], 56]
v = 34 in li
print(v)=====>结果是:True
***********************
li = [12, 34, [45, 67], 56]
v = 67 in li====>判断67是否是列表中的元素,由于[45, 67]才是li里的一个元素,所以67不是列表的元素
print(v)======>结果是:False
- 字符串转换成列表 代码是:list(字符串)
a = "sdhfg"
a1 = list(a)
print(a1)=======>结果是:['s', 'd', 'h', 'f', 'g']
-列表转换成字符串
1)如果列表里既有数字又有字符串,需要自己写for循环一个一个处理。如下:
li =[12, 34, "wode", '我们']
s = ""
for v in li:
s = s + str(v)
print(s)====>结果是:1234wode我们
2)如果列表只有字符串,可以使用代码:"".join()
li = ["wode", '我们']
a = "".join(li)
print(a)====>结果是:wode我们
-数字不能转换成列表
-enumerate(列表/字典/元祖,序号从几开始) 给可迭代对象添加序号
如下:
li = (12, 22, 33, 44)
for k, v in enumerate(li, 1):
print(k, v)====>1 12
2 22
3 33
4 44
list类中提供的方法
对象调用某个方法:对象.某个方法(....)。
例如对象:列表li, 方法append, li.append()就是li对象调用了append方法。
*1)append(self, *args, **kwargs) 在原来列表最后追加参数(整个元素)
代码:x.append(a) 其中 (a)称为参数
li = ["wode", '我们']
li.append([1234])=====>由于列表可以修改,所以可以直接操作,[1234]作为一个元素直接添加在列表最后。
print(li)====>结果是:['wode', '我们', [1234]]
2)clear 清空
代码:x.clear()
li = ["wode", '我们']
li.clear()
print(li)====>结果是:[]
3)copy 拷贝(浅拷贝)
代码:x.copy()
li = ["wode", '我们']
v = li.copy()
print(v)====>['wode', '我们']
4) count 计算元素出现的次数
代码:x.count()
li = ["wode", '我们', 21, 34, [21, 23]]
v = li.count(21)=====>元素21只出现一次,[21, 23]中的21 不计算,因为它不是列表的一个元素。
print(v)====>结果是:1
*5)extend 扩展原列表。参数:可迭代对象
代码:x.extend(可迭代对象)
li = [21, 34, [21, 23]]
li.extend("我不高兴")
print(li)======>结果是:[21, 34, [21, 23], '我', '不', '高', '兴']
6) index 根据值查找当前值所在列表中的索引位置,从左到右找,找到第一个直接输出索引位置,后边不执行
li = [21, 34, 21, [21, 23]]
v = li.index(21)
print(v)=====结果是:0
7)insert 在指定索引位置前插入
代码:x.insert(索引,插入内容)====>插入位置在索引前
li = [21, 34, 21, [21, 23]]
li.insert(2,["我们", 12])====>在索引2前边添加["我们", 12],即是在元素21前边添加["我们", 12]
print(li)=====>结果是:[21, 34, ['我们', 12], 21, [21, 23]]
8) pop 删除列表某个值,并获取删除的这个值
代码:x.pop(索引位置),若索引位置不写,默认是删除最后一个元素。
li = [21, 34, 21, [21, 23]]
v = li.pop()
print(li)====>结果是:[21, 34, 21]
print(v)=====>结果是:[21, 23]
*********************************************************
li = [21, 34, 21, [21, 23]]
v = li.pop(1)
print(li)======>结果是:[21, 21, [21, 23]]
print(v)=======>结果是:34
9)remove 删除列表中的指定值,从左开始找到并删除,后边不执行(左边优先)
代码:x.remove(值)
li = [21, 34, 21, [21, 23]]
li.remove(21)=====从左开始,第一个就是21,直接删除然后不往下执行。
print(li)=====>结果是:[34, 21, [21, 23]]
10)reverse 将列表中的元素反转。
代码:x.reverse()
li = [21, 34, 21, [21, 23]]
li.reverse()
print(li)=======>[[21, 23], 21, 34, 21]
11)sort 给列表中的元素按照一定的顺序排序
代码:x.sort(顺序)
1,元素从小到大排序代码: x.sort()
li = [21, 34, 21, 56]
li.sort()
print(li)=====>结果是:[21, 21, 34, 56]
2, 元素从大到小排序代码:x.sort(reverse=True)
li = [21, 34, 21, 56]
li.sort(reverse=True)
print(li)======>结果是:[56, 34, 21, 21]
3, cmp
4, key
5,sorted
4,元祖(tuple)
元祖基本操作
列表有序,元素可以被修改
li = [11, 22, 33, 44]
1,元祖的一级元素不可以被修改,并且元组不可以被增加或者删除。ps:推荐:书写元祖时在最后一个元素后加上逗号,
tu = (11, 22, 33, 44,)
2,元祖可以通过索引/切片取值
tu = (11, 22, 33, 44,)
v1 = tu[0]======>通过索引取值,结果是:11
v2 = tu[0:3]=====>通过切片取值,结果是:(11, 22, 33)
print(v1,v2)
3,可以被for 循环,是可迭代对象
tu = (11, 22, 33, 44,)
for item in tu:
print(item)
结果是:
11
22
33
44
4,字符串,列表,元祖 相互转换
-字符串转换成元祖 tuple(字符串)
s = "asddef234"
s2 = tuple(s)
print(s2)===>结果是('a', 's', 'd', 'd', 'e', 'f', '2', '3', '4')
-列表转换成元祖 tuple(列表)
li = [45, 32, "sdf"]
li1 = tuple(li)
print(li1)====>结果是:(45, 32, 'sdf')
-元祖转换成字符串
1)如果元祖中元素都是字符串可以使用join 方法 代码:"".join(元祖)
tu = ("sde", "ed",)
v = "".join(tu)
print(v)===>结果是:sdeed
2)如果元祖中元素既有字符串也有数字,代码如下:
tu = ("sde", "ed", 123,)
s = ""
for item in tu:
s = s +str(item)
print(s)====>结果是:sdeed123
-元祖转换成列表 list(元祖)
tu = ("sde", "ed", 123,)
v = list(tu)
print(v)====>结果是:['sde', 'ed', 123]
5,元祖也是有序的,元祖取值 如下:
tu = (111, "alex",[(22, 33,)])
取出22 代码如下:
v = tu[2][0][0]
print(v)===>结果是:22
6,元祖的一级元素不可修改/删除/增加,但是其中的列表可以修改。
tu = (111, "alex",[(22, 33,)])=====>(22, 33,)中的22 不可修改因为它是元祖(22, 33,)的一级元素
tu[2][0] = 12
print(tu)====>结果是:(111, 'alex', [12])
解析:
tu[2][0]取出来的是(22, 33,),它不是列表的一级元素
(22, 33,)是在列表中的,而列表可以修改的,所以就可以修改为12
7,方法
-count,指定元素在元祖里出现的次数
代码:元祖.count(元素)
-index 指定元素的索引
代码:元祖.index()
5,字典(dict)
-格式:{key: value},
-value 可以是任何类型:字符串,布尔值,元祖,数字,字典,列表等等
-列表,字典不能作为字典的key,其他都可以
1)当True/False 作为key 时 并字典内有key 是1/0时,True/False 会与1/0重复,只会显示一个.
ps:True(0) False(1)
infor = {"a1":"b1", 1: {"c4":[55, 38], 5: 8}, True: (12, [22, 33],)}
print(infor)========>{'a1': 'b1', 1: (12, [22, 33])}
2)当True/False 作为key 时 并字典没有key 是1/0时,会显示True
infor = {"a1":"b1", 3: {"c4":[55, 38], 5: 8}, True: (12, [22, 33],)}
print(infor)==========>{'a1': 'b1', 3: {'c4': [55, 38], 5: 8}, True: (12, [22, 33])}
info = {"a1": "b1", "a2": "b2"}. 元素"a1" : "b1"是键值对,"a2" : "b2"也是,其中b1,b2 是字典里的value;a1,a2是key.
-字典无顺序,所以没有切片,只能索引
-字典取值
代码:字典[key]
infor = {"a1": "b1", 3: "c1"}
v = infor["a1"]
print(v)====>结果是:b1
注意:如果字典内value嵌套元祖/列表时,要取嵌套元祖/列表内的值 代码:字典[key] [元祖/列表索引] [值索引]
如果字典内value 嵌套字典时,要取嵌套字典内的值 代码:字典[key] [嵌套字典的key]
infor = {"a1": "b1", 3: {"c4": [55, 38]}, 5: (12, [22, 33],)}
v1 = infor[5][1][0]
print(v1)=========>结果是:22
v2 = infor[3]["c4"][0]
print(v2)=========>结果是:55
-del 删除字典内元素
代码:del 字典[key]
删除[55, 38]
infor = {"a1": "b1", 3: {"c4":[55, 38], 5: 8}, 5: (12, [22, 33],)}
del infor[3]["c4"]
print(infor)=======>结果是:{'a1': 'b1', 3: {5: 8}, 5: (12, [22, 33])}
-for 循环
for 循环默认只输出key 代码: for 变量 in 字典:
print(变量)
infor = {"a1": "b1", 3: {"c4":[55, 38], 5: 8}, 5: (12, [22, 33],)}
for item in infor :
print(item)========>结果是:a1
3
5
ps:另外输出key还有另一个代码:for 变量 in 字典.keys:
print (变量)
infor = {"a1": "b1", 3: {"c4":[55, 38], 5: 8}, 5: (12, [22, 33],)}
for item in infor.keys() :
print(item)=======>结果是:a1
3
5
如果只需要输出value ,代码: for 变量 in 字典.values():
print (变量)
如果既要获得key,又要获得value
1)代码:
for 变量 in 字典:
print (变量, 字典[变量])
infor = {"a1": "b1", 3: {"c4":[55, 38], 5: 8}, 5: (12, [22, 33],)}
for item in infor:
print(item, infor[item])===>结果是:a1 b1
3 {'c4': [55, 38], 5: 8}
5 (12, [22, 33])
2) 代码:
for k, v in 字典.items(): ======>k, v 是键值对变量
print(k, v)
infor = {"a1": "b1", 3: {"c4":[55, 38], 5: 8}, 5: (12, [22, 33],)}
for k, v in infor.items():
print(k, v)======>结果是:a1 b1
3 {'c4': [55, 38], 5: 8}
5 (12, [22, 33])
-功能
1)clear 清空字典
2)copy 浅拷贝
3)fromkeys 根据序列,创建字典,并指定统一的值 .代码:dict.fromkeys(列表,value)
fromkeys 支持直接写类名执行这个功能。
v = dict.fromkeys(["wode", 23], 54)
print(v)======>结果是:{'wode': 54, 23: 54}
4)get : 根据key 取值,如果key 不存在,可以指定默认值(默认None);如果key存在,直接输出key对应的value 值
代码:字典.get(key, 设置默认值),默认值不写,默认None
dic = {12: "wo", 34: 56}
v = dic.get(22)
print(v)=====>结果是:None
**************************
dic = {12: "wo", 34: 56}
v = dic.get(22,"不存在")
print(v)=====>结果是:不存在
v2 = dic.get(12,"不存在")
print(v2)======>结果是:wo
*5)items 运用在for 循环中,获取key以及其对应的value
代码:
for k, v in 字典.items():
print(k, v)
dic = {12: "wo", 34: 56}
for k, v in dic.items():
print(k, v)===结果是:
12 wo
34 56
*6)keys 只获取字典中所有的keys
代码:
for x in 字典.keys():
print(x)
dic = {12: "wo", 34: 56}
for x in dic.keys():
print(x)====>结果是:
12
34
*7)values 只获取字典中的values
代码:
for x in 字典.values():
print(x)
dic = {'k1': "wo", 'v2': 56}
for x in dic.values():
print(x)===>结果是:wo
56
8) pop 根据key,删除指定键值对,并获取删除的键值对中的value值
代码:字典.pop(删除指定key,设定值) ps:设定值可写可不写。如果写上,一旦指定的key不存在字典中,可以输出设定值
dic = {12: "wo", 34: 56, 22: "nide"}
v = dic.pop(12)
print(dic)====>结果是:{34: 56, 22: 'nide'}
print(v)======>结果是:wo
*********************************************
dic = {12: "wo", 34: 56, 22: "nide"}
v = dic.pop(33, "不存在")
print(v)======>结果是:不存在
9)popitem() 随机删除键值对并输出键值对
代码:字典.popitem() /或者k, v = 字典.popitem()
dic = {12: "wo", 34: 56, 22: "nide"}
v = dic.popitem()
print(v)=====>结果是:(22, 'nide')
************************************
dic = {12: "wo", 34: 56, 22: "nide"}
k, v = dic.popitem()
print(k, v)======>结果是:22 nide
10)setdefault 设置值,代码:字典.setdefault(设置的key, 设置value)
-如果设置的key在字典中存在,不设置,并获取当前key在字典中对应的value
dic = {12: "wo", 34: 56}
v = dic.setdefault(12, "在吗")
print(dic)=====>结果是:{12: 'wo', 34: 56}
print(v)=======>结果是:wo
-如果设置的key在字典中不存在,设置,并获取设置value
dic = {12: "wo", 34: 56}
v = dic.setdefault("你好", "在吗")
print(dic)======>结果是:{12: 'wo', 34: 56, '你好': '在吗'}
print(v)=====>结果是:在吗
*11) update 更新字典中的键值对,如果字典中包含更新的key,直接将原value 更新成新value;如果字典中不包含更新的key,直接把键值对添加进字典中。有两种方式如下:
-代码:字典.update({更新的key: 更新的value})
dic = {12: "wo", 34: 56}
dic.update({12: 11, 33: 55})
print(dic)==========>{12: 11, 34: 56, 33: 55}
-代码: 字典.update(更新的key=更新的value)
dic = {'k1': "wo", 'v2': 56}
dic.update(k1 = 22, v3 = 456)
print(dic)=====>结果是:{'k1': 22, 'v2': 56, 'v3': 456}
6,布尔值(bool)
以下结果都是False:
None "" () [] {} 0