第5天数据类型之整形,字符串和列表
整形(不可变,存储一个值)
对于int类型的解释
把一个数字或者字符串转换成整形,如果没有参数就返回0,如果参数是一个数字,那么就不变。对于浮点型,会自动省略小数点后面的值
Convert a number or string to an integer, or return 0 if no arguments are given. If x is a number, return x.__int__(). For floating point numbers, this truncates towards zero.
# 这个主要说的是进制转换的方法,默认base为10是十进制的 If x is not a number or if base is given, then x must be a string, bytes, or bytearray instance representing an integer literal in the given base. The literal can be preceded by '+' or '-' and be surrounded by whitespace. The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to interpret the base from the string as an integer literal. >>> int('0b100', base=0) 4 # (copied from class doc)
赋值操作
number = 10 # python在声明变量的时候不需要声明变量的类型,会进行自动的转换,其实这个就是执行了number = int(10)
转换操作,如下图所示,如果转换的是number,int括号里面可以为整形也可为浮点型,如果转换的是str,括号里面的字符串必须只能包含整数,负责会报错。如果int里面什么都没有,会返回0。
十进制转换成其他进制的方法
# 系统自带的一写内置函数会给我们用来对十进制到其他进制的转换
print(bin(256)) # 十进制转换成二进制 print(oct(256)) # 十进制转换成八进制 print(hex(256)) # 十进制转换成十六进制
其他进制转换成十进制的方法
# 其他进制转换成字符串的时候传入的第一个参数必须是字符串类型
# 第一个参数代表的是多少进制的数,后面的参数代表的是进制
print(int('56', 10)) # 10进制的数56要转换成10进制 print(int('0101', 2)) # 二进制的数0101要转换成10进制 print(int('56', 8)) # 八进制的数56要转换成十进制 print(int('56', 16)) # 16进制的数56要转换成十进制
浮点型(不可变,可存储一个值)
python关于浮点型的解释
# 和整形其实是一样的,如果可以转换就用来转换一个数字和字符串为浮点型的数据
Convert a string or number to a floating point number, if possible.
浮点型的赋值操作
float_number = 1.2
浮点型的转换操作,转换操作大部分和int是类似的,不同的是float里面字符的可以是浮点型的.当传递的值为空的时候返回为0.0 。
字符串(不可变,有序,可存储多个值)
取值和切片
从前往后面进行取值和切片的,取值就是根据字符串的索引来取的,字符串的切片默认取左不取右的,例如图中的s[0::1]和s[0:-1:1]通过结果可以看出来,s[0:-1:1]是取不到最后一个字符的
除了从前往后取值之外,还有从后往前取值的,很简单,就是步长变成负的就可以了,但是要强调的一点是s[参数一:参数二: 参数三]中的三个参数是有一定的逻辑的,当参数一:参数二本身是从前往后的话,参数三就必须是正数,当参数一到参数二是从后往前的话,参数三就必须是复数了。否则是取不到值的。如下图所示:0: -1 是从前往后的,但是参数三却是-1,-1:0是从后往前的,但是参数三确实1,所以取不到数据。
strip方法:(lstrip去除左边的指定字符,rstrip去除右边的指定字符)
# strip就是去除字符串两边的指定的字符 s1 = 'hello, world, 胡 ' a = s1.strip() # 默认为去除字符串两边的空格 print(a) s2 = '*h^ello, wor,ld, , 胡*' a = s2.strip(' ,,*胡') # 只要是有的字符都会去除,只有等到没有了才会停止 print(a)
s2.strip("") # 这个会返回一个原来的字符串
split方法:(可以看作是str转化成列表的方法), rsplit从右边开始切片
#split分割会返回一个里面都是字符串的列表 s = '*hello**world*nihao*' s1 = s.split('*') #从左往右以*分割 print(s1) s2 = s.split('**') # 从左往右以**分割 print(s2) s3 = s.split('*', 2) # 从左往右以*为分割点分割两次 print(s3) # 运行结果: ['', 'hello', '', 'world', 'nihao', ''] ['*hello', 'world*nihao*'] ['', 'hello', '*world*nihao*']
print(s.split("")) # 和strip不一样,这样子写会报错
join方法(列表,元祖,字典转换成str的方法)
join可以拼接一个可迭代对象,例如列表,元祖,字典,集合等,但是无论是哪种类型,里面的值必须是字符串类型的才可以进行拼接,否则会报错。
endswith, startwith
s = 'hello, world' print(s.endswith('d', 0, -1)) # 从0到-1结束是否是以d结尾的 print(s.startswith('h', 0, -1)) # 从0到-1结束是否是以d开头的 # 结果: False True
replace 替换方法
s = 'hello, hh ' r = s.replace('h', 'H', 2) # 参数一为旧的,参数二为新的,参数三为替换的个数 print(r)
upper和lower方法
# upper全部变成大写,lower全部变成小写
a = 'hello, World! 中国 ' print(a.upper()) print(a.lower()) # 显示结果: HELLO, WORLD! 中国 hello, world! 中国
format方法
有了%的格式化输出为什么还要format呢?如下图,用%格式化写起来就比较麻烦了,而且还要对准位置。
a = ''' 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 你好,{name},你今年{age}了。 '''.format(name='hu', age=123) print(a)
index, find, rfind, rindex位置查询
# index, find 都是字符所在的位置,index找不到的时候会报错,find找不到的时候返回-1, 因此以后呀多用find,少用index s = 'hello, world!' res1 = s.index('h', 0, 6) res2 = s.find('h', 0, 6) res3 = s.find('h0', 0, 6) print(res1, res2, res3) res4 = s.index('ho', 0, 6)
# rfind和rindex其实就是在寻着索引的时候有时候会遇到多个,rfind和rindex其实就是去找最后一个的索引所在的位置
captilize, title,swapcase
# capptalize首字母大写,如果首字母是特殊字符就不变 title每个单词首字母大写,以特殊字符分割的都是一个单词,swapcase大小写的反转 s = 'hello*wor.ld!' print(s.capitalize()) print(s.title()) print(s.swapcase()) # 结果展示 Hello*wor.ld! Hello*Wor.Ld! HELLO*WOR.LD!
center, ljust, rjust, zfill填充
# center,ljust,rjust,zfill s = 'hello' print(s.center(6, '*')) # 参数一代表的是长度,参数二代表的是填充的字符 print(s.ljust(10, '*')) print(s.rjust(10, '*')) print(s.zfill(6)) # 结果: hello* hello***** *****hello 0hello
字符串练习题:(附答案)
# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分) name = " aleX" # 1) 移除 name 变量对应的值两边的空格,并输出处理结果 print(name.strip()) # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 print(name.startswith('al')) # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 print(name.endswith('X')) # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 print(name.replace('l', 'p')) # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 print(name.split('l')) # 6) 将 name 变量对应的值变大写,并输出结果 print(name.upper()) # 7) 将 name 变量对应的值变小写,并输出结果 print(name.lower()) # 8) 请输出 name 变量对应的值的第 2 个字符? print(name[1]) # 9) 请输出 name 变量对应的值的前 3 个字符? print(name[0:3]) # 10) 请输出 name 变量对应的值的后 2 个字符? print(name[-1:-3:-1]) # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? print(name.find('e')) # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。 print(name[0:-1])
View Code
列表(可变,有序,可存储多个值)
列表的创建
l = [1, 2, 3] # ==》 l = list([1,2,3])
列表的转换
只要是可迭代类型的数据都是可以转换成列表的,例如: 元组,字典,字符串都是可以转换成列表的,但是整形和浮点型不行,因为他们不可迭代
列表的索引和切片和字符串的都是一样的,此处不再赘述。其中列表是可以通过索引进行修改数据的,但是字符串不能修改。虽然可以修改数据,但是列表却不能通过索引去添加新的值。因此需要通过方法去添加值。
列表的方法
修改法:del, append, insert, extend, remove, pop
l = [1, 2, 3] l.append('h') l.append(['a', 'b', 'c']) l.append(('a', 'b', 'c')) l.append('str') l.append({'a': 1}) print(l) # 显示结果 [1, 2, 3, 'h', ['a', 'b', 'c'], ('a', 'b', 'c'), 'str', {'a': 1}]
# append把整体的一个输入追加到列表的最后
l = [1, 2, 3] l.insert(0, 'h') l.insert(0, ['a', 'b', 'c']) l.insert(0, ('a', 'b', 'c')) l.insert(0, 'str') l.insert(0, {'a': 1}) print(l) # 展示的结果 [{'a': 1}, 'str', ('a', 'b', 'c'), ['a', 'b', 'c'], 'h', 1, 2, 3]
# insert在指定的位置把整体的数据添加进去
l = [1, 2, 3] l.extend('h') l.extend(['a', 'b', 'c']) l.extend(('a', 'b', 'c')) l.extend('str') l.extend({'a': 1}) print(l) # 展示结果 # [1, 2, 3, 'h', 'a', 'b', 'c', 'a', 'b', 'c', 's', 't', 'r', 'a']
# extend会把可迭代对象一个一个的追加到列表当中
# remove, pop, del l = ['a', 'b', 'c', 'd', 'e'] del l[0] # 遭到列表中的值并删除掉 res = l.pop(0) # 根据索引删除值并且有返回值的 l.remove('e') # 根据列表中的内容删除值,没有返回值 print(l, res) # 结果: # ['c', 'd'] b
索引index 计数count(和字符串的方法是一样的)
a = [1, 2, 3, 1, 2, 3, 1, 2, 3, 4] print(a.index(4, 0)) # 一个是取索引 print(a.count(4)) # 一个是计数
排序sort 反转reverse
sort只能排序全部都是数字或者字母的列表,否则会出现错误,反转是都可以的
复制copy 清空clear
a = [1, 2, 3] b = a.copy() # 复制了一个a列表 print(b) b.clear() # 把b给清空掉 print(b)