python基础二 ---类型转换 ,字符串,列表,元祖,for,range,enumerate
一 数据类型一览
int : 数字 1,2,3 等 ,用于计算
bool : True,False. 用于判断
string : 存储少量数据,用于操作
list : 存储大量数据,任何数据都可存储
[ 1,2,"sdffds",[1,2,3],'dfdfdf']
元祖:存储大量数据,任何数据都可存储,但是只读。
dict(字典): 存储大量关系型数据,查询速度很快。
第一种:{‘name’ : 'john' , 'age' : '22' , 'height' : '180'}
第二种 : { 'john' : [22,180,....... ] , 'oliver' : [.........] }
集合 : 与list类似,主要用于 求交集 和 求并集 。
二 基础数据类型及类型转换
1 int
bit_length() 当十进制用二进制表示时,最少使用的位数
''' bit_length 1 0000 0001 1 2 0000 0010 2 3 0000 0011 2 '''
2 bool
只有true 和 false 代表真假。
真 = 数字 = true、假 = 0 = false
3 类型转换
第一种:数字(int)与 字符串(str)
int-->str str(int)
str-->int int(str) 注意:只有字符串内容是数字时,才可转换。
第二种:数字(int)与 布尔值(bool)
int-->bool bool(int) 非零数 = true 0 = false
bool-->int int(bool) true = 1 false = 0
#ps: 进行死循环时,选择效率高的 while True: pass while 1: 效率高 pass
第三种:布尔值(bool)与 字符串(str)
str-->bool s = " " 空字符串为false s = "0",s = "非空字符串"为true
bool-->str
第四种:字符串(str)与 列表(list)
str-->list li =s.split()
list-->str s = " ".join(li)
join
#'连接符,默认为拼接' . join(可迭代对象) #返回字符串 #除了int,bool,含有多个元素的字符串,列表等可迭代 li = ['taibai','alex','wusir','egon','女神',] s = '++++'.join(li) print(s) #taibai++++alex++++wusir++++egon++++女神
第五种: list --set
#去重 li = [1,2,33,33,2,1,4,5,6,6] set1 = set(li) print(set1) # {1, 2, 33, 4, 5, 6} 将列表变集合去重 li = list(set1) print(li) # [1, 2, 33, 4, 5, 6] 再将去重的集合变列表
4 str
字符串的索引和切片
索引:通过下标选取字符串中的元素,下标从零开始。(从左到右)
切片:通过索引截取字符串中的元素,形成新的字符串。(原则:顾头不顾尾)
a = "ABCDEFG" # 1 取单个元素 print(a[3]) # -->D # 2 取一段 ,[首:尾:步长] print(a[0:3]) #-->ABC 顾头不顾尾 print(a[0:]) #默认到最后 或者print(a[:]) print(a[0:-1]) #-1就是最后一个 -->ABCDEF print(a[-1::-1])# --> GFEDCBA #3 隔几个取 print(a[0:5:2]) #加步长-->ACE print(a[5:0:-2]) #反向加步长-->FDB
字符串的操作
s = "AKKscDxx"
#1 首字母大写 print(s.capitalize()) #2 全大写,全小写 用于验证不区分大小写的密码、验证码 print(s.upper()) print(s.lower()) #3 大小写翻转 print(s.swapcase()) #4 每个(空格,数字,特殊字符隔开的)单词的首字母大写 s= 'big small7middle&hi ' print( s.title())#-->Big Small7Middle&Hi #5 内同居中,总长度,空白处填充(空格或其他字符) s="a" print(s.center(10,"*")) #-->****aa**** #6 \t 前面的补全 “““默认将一个tab键变成8个空格,如果tab前面的字符长度不足8 个,则补全8个,如果tab键前面的字符长度超过8个不足16个则 全16个,以此类推每次补全8个。””” s = "hqw\tdfehdgyb" print( s.expandtabs())#-->hqw dfehdgyb #7 startswith 判断是否以...开头 # endswith 判断是否以...结尾 s = "dkfjdkfasf54" print(s.endswith('jdk',3,6)) #-->true # 返回的是布尔值 顾头不顾腚 print(s.startswith("kfj",1,4))#-->true print(s.startswith(“dk"))#-->true #8 通用方法 l = len(s) #求字符串s的长度,返回值为 int #9 查找字符串中的元素 # find 通过元素找索引,找不到返回-1(int) # index通过元素找索引,找不到报错 # 找到返回下标数字(int) s = 'alexWUsir' s8 = s.find('A') s81 = s.index('A') print(s81,type(s81)) s= "dkfjdkfasf54" print(s.find("fjdk",1,6)) # -->返回 2 #10 去空格(特殊符号等) 默认删除前后空格,用于用户输入 s = "*egon**" print(s.strip('*'))#-->egon print(s.lstrip('*'))#-->egon** print(s.rstrip('*'))#-->*egon #s.strip(“%$#”) 分别删除%¥# #11 统计字符串中某个元素出现的次数 列表、元祖等通用 s = "adfad" print(s.count("a",0,4) ) # 可切片 #12 拆分 默认以空格拆 可将字符串拆成列表,得到的列表不含 分割元素 # 注意原则:一分为二 s = ';alex;wusir;taibai' l = s.split('a')print(l)#-->[';', 'lex;wusir;t', 'ib', 'i'] #13 格式化输出fomat(更高级) #format的三种格式化输出 # s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('太白',36,'girl','太白') # print(s) 对应 # name = input('请输入名字:') # s = '我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format(name,36,'girl') # print(s) 索引 # name = input('请输入名字:') # s = '我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(age=18,name=name,hobby='girl') # print(s) 变量 #14 replace (旧的,新的,个数) s = '哈哈顶顶顶顶哈哈' s = s.replace('哈哈','呵呵',1) print(s)-->#呵呵顶顶顶顶哈哈 只替代一个 #15 is系列 返回 true false name='jinxin123' print(name.isalnum()) #字符串由字母或数字组成 print(name.isalpha()) #字符串只由字母组成 print(name.isdigit()) #字符串只由数字组成
5 列表list
列表的索引和切片与字符串相同,且得到的是列表。
列表的操作(增删改查)与字符串操作不一样,对列表进行操作将改变原列表,对字符串操作创建新字符串,原字符串不变。
通常对列表的操作与对列表中字符串的操作结合进行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
li = ['alex','wusir','egon','女神','taibai'] #增加 append li.append("nihao") print(li)#-> ['alex', 'wusir', 'egon', '女神', 'taibai', 'nihao'] #索引插入insert(索引,对象) li.insert(2,123) # ['alex', 'wusir', 123, 'egon', '女神', 'taibai'] #迭代插入extend(可迭代对象)分解到元素再加入 li.extend(123) #报错 数字不可迭代 li.extend([1,2,"asd"]) #['alex', 'wusir', 'egon', '女神', 'taibai', 1, 2, 'asd']
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
li = ['taibai','alex','wusir','egon','女神',] #按索引删 pop() #pop() 默认删最后一个,且可返回删除的值 print(li.pop(2),li) # wusir ['taibai', 'alex', 'egon', '女神'] #按元素删 remove() li.remove('taibai') print(li)#-->['alex', 'wusir', 'egon', '女神'] #清空 clear() li.clear() print(li) #-->[] #在内存中删除列表 del li #切片去删 del li[x:y] del li #报错 li 不存在 del li[0:2] #['wusir', 'egon', '女神'] print(li)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#直接赋值改变 li[0] = "男神"#-->['男神', 'alex', 'wusir', 'egon', '女神'] #先切片删除,再添加(添加不需要等于删除) li[0:3] = '云姐pl'#-->['云', '姐', 'p', 'l', 'egon', '女神'] li[0:3] = [1,2,3,'春哥','咸鱼哥'] #-->[1, 2, 3, '春哥', '咸鱼哥', 'egon', '女神'] print(li)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#循环查 for i in li: print(i) #切片查某一段 print(li[0:2])
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 li = ['taibai','武藤兰','苑昊',['alex','egon',89],23] 2 # print(li[1][1]) 3 # li[0] = li[0].capitalize() 4 5 # li[2] = '苑日天' 6 # print(li[2].replace('昊','ritian')) 7 # li[2] = li[2].replace('昊','ritian') 8 9 # li[3][0] = li[3][0].upper() 10 # print(li)
6 通用方法
len()
#求长度 s = "adfad" print(len(s)) #--> 5 (个字符) a = ["q", "wss", "qssss", "sssr", "t", "y"] print(len(a)) #--> 6 (个元素)
count ()
#统计某个元素出现的次数 s = "adfad" print(s.count("a",0,4) ) # 可切片 a = ["q","w","q","r","t","y"] print(a.count("q"))
index()
#找出某个值第一个匹配项的索引位置 a = ["q","w","r","t","y"] print (a.index("r")) s = 'alexWUsir' print(s.index('al'))
reverse() 字符串不能用
#反转元素 li = ['taibai','alex','wusir','egon','女神',] li.reverse() print(li) #--> ['女神', 'egon', 'wusir', 'alex', 'taibai']
sort() 字符串不能用
li = ['taibai','alex','wusir','egon','女神',] #正向排序 再原列表的基础上 li.sort() print(li)#-->['alex', 'egon', 'taibai', 'wusir', '女神'] #反向排序 li.sort(reverse=True) print(li)#-->['alex', 'egon', 'taibai', 'wusir', '女神']
7 元祖
#元祖 只读列表,可循环查询,可切片。
#儿子不能改,孙子可以改
tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') tu[4][3]=tu[4][3].upper() print(tu) #-->(1, 2, 3, 'alex', [2, 3, 4, 'TAIBAI'], 'egon')
#元祖 如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。 tu1 = (1) tu2 = (1,) print(tu1,type(tu1)) # 1 <class 'int'> print(tu2,type(tu2)) # (1,) <class 'tuple'>
8 range
#列表,盛放数字 (首,尾,步长) # for i in range(3,10): #顾头不顾尾 3.4...9 # for i in range(10): #0.1.2...9 # for i in range(0,10,3):#0 3 6 9 # for i in range(10,0,-2):#10 8 6 4 2 # for i in range(10,-1,-2):#10 8 6 4 2 10 8 ...2
9 for
for i in s: if i in s:
# 输出元素 li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds'] for i in li: if type(i) == list: for k in i: print(k) else:print(i) for i in range(len(li)): if type(li[i]) == list: for j in li[i]: print(j) else:print(li[i]
10 enumerate
li = ['alex','taibai','wusir','egon'] for i in li: print(li.index(i),i) 0 alex 1 taibai 2 wusir 3 egon # li需可迭代,index为索引,可加 for index,i in enumerate(li,100): print(index,i) 100 alex 101 taibai 102 wusir 103 egon