基本数据类型内置方法
一、进制之间的转换
- 实例
'''
二进制转10进制
110
人工计算:1*(2**2)+1*(2**1)+0*(2**0)=6
电脑计算:print(int("110", 2))
八进制转10进制
123
人工计算:1*(8**2)+2*(8**1)+3*(8**0)=83
电脑计算:print(int("123", 8))
16进制转10进制
801
人工计算:8*(16**2)+0*(16**1)+1*(16**0)=2049
电脑计算:print(int("801", 16))
10进制转2进制
bin(108)
>>>0b1101100
10进制转8进制
oct(108)
>>>0o154
10进制转16进制
hex(801)
>>>0x321
'''
二、基本数据类型及内置方法
整型int
用途: 用来记录人的年龄,手机号码等整数相关的状态
定义方式:age = 18
常用于数学计算
小结:整型int无序,不可变,存一个值
浮点型float
用途: 用来记录人的身高,体重,薪资等小数相关的转态
定义方式:height = 1.77
常用于数学计算
小结: 无序,不可变,一个值
字符串str
用途: 用来存一些描述性的信息,存个人爱好,个人简介
定义方式:s1 = 'yafeng666'
可用单引号或双引号或三引号表示,但不可混用
小结:有序,不可变,一个值
字符串要优先掌握的内置方法
#1.strip()去除字符串左右两边的空格,但是去除不了中间的间隔,那个用户太不友好了
s1 = "***yafeng666***"
s1.strip("*")
print(s1.strip("*"))
>>>yafeng666
#2.split()切分,对字符串进行切分,可以指定切分的分隔符,返回是一个列表
s2 = "yafeng|18|male"
s2.split("|")
print(s2.split("|"))
>>>['yafeng', '18', 'male']
#3.len()获取当前数据中元素的个数,空格也算一个字符
s1 = "***yafeng666***"
print(len(s1))
>>>15
str1 = 'hello python!'
# 4.按索引取值(正向取,反向取):
# 4.1 正向取(从左往右)
>>> str1[6]
p
# 4.2 反向取(负号表示从右往左)
>>> str1[-4]
h
# 4.3 对于str来说,只能按照索引取值,不能改
>>> str1[0]='H' # 报错TypeError
# 5.切片(顾头不顾尾,步长)
# 5.1 顾头不顾尾:取出索引为0到8的所有字符
>>> str1[0:9]
hello pyt
# 5.2 步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2、4、6、8的字符
>>> str1[0:9:2]
hlopt
# 5.3 反向切片
>>> str1[::-1] # -1表示从右往左依次取值
!nohtyp olleh
# 6.成员运算 in 和 not in
# 6.1 int:判断hello 是否在 str1里面
>>> 'hello' in str1
True
# 6.2 not in:判断tony 是否不在 str1里面
>>> 'tony' not in str1
True
# 7.循环
>>> str5 = '今天你好吗?'
>>> for line in str5: # 依次取出字符串中每一个字符
... print(line)
...
今
天
你
好
吗
?
- 字符串需要掌握的方法
1、strip,lstrip,rstrip
str1 = "***yafeng666***"
>>> str1.strip('*') # 移除左右两边的指定字符
'yafeng666'
>>> str1.lstrip('*') # 只移除左边的指定字符
yafeng666***
>>> str1.rstrip('*') # 只移除右边的指定字符
***yafeng666
2、lower(),upper()
>>> str2 = 'My nAme is yafenG!'
>>> str2.lower() # 将英文字符串全部变小写
my name is yafeng!
>>> str2.upper() # 将英文字符串全部变大写
MY NAME IS YAFENG!
3、startswith,endswith
>>> str3 = 'yafeng 666'
# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
>>> str3.startswith('y')
True
>>> str3.startswith('j')
False
# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
>>> str3.endswith('666')
True
>>> str3.endswith('sixsixsix')
False
4、格式化输出之format
# 类似于%s的用法,传入的值会按照位置与{}一一对应
>>> str4 = 'my name is {}, my age is {}!'.format('yafeng', 18)
>>> str4
my name is yafeng, my age is 18!
# 把format传入的多个值当作一个列表,然后用{索引}取值
>>> str4 = 'my name is {0}, my age is {1}!'.format('yafeng', 18)
>>> str4
my name is yafeng, my age is 18!
>>> str4 = 'my name is {1}, my age is {0}!'.format('yafeng', 18)
>>> str4
my name is 18, my age is yafeng!
>>> str4 = 'my name is {1}, my age is {1}!'.format('yafeng', 18)
>>> str4
my name is 18, my age is 18!
# format括号内在传参数时完全可以打乱顺序,但仍然能指名道姓地为指定的参数传值,name=‘yafeng’就是传给{name}
>>> str4 = 'my name is {name}, my age is {age}!'.format(age=18,name='yafeng')
>>> str4
'my name is yafeng, my age is 18!'
>>> str4 = 'my name is {name}{name}{name}, my age is {name}!'.format(name='yafeng', age=18)
>>> str4
'my name is yafengyafengyafeng, my age is yafeng!'
5、split,rsplit
# split会按照从左到右的顺序对字符串进行切分,可以指定切割次数
>>> str5='yafeng:/6/6/6'
>>> str5.split('/',1)
['yafeng', '6/6/6']
# rsplit刚好与split相反,从右往左切割,可以指定切割次数
>>> str5='6|6|8'
>>> str5.rsplit('|',1)
['6|6', '8']
6、join
# 从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串
>>> '%'.join('hello') # 从字符串'hello'中取出多个字符串,然后按照%作为分隔符号进行拼接
'h%e%l%l%o'
>>> '|'.join(['yafeng','18','read']) # 从列表中取出多个字符串,然后按照*作为分隔符号进行拼接
'yafeng|18|read'
7、replace
# 用新的字符替换字符串中旧的字符
>>> str7 = 'my name is yafeng, my age is 18!' # 将yafeng的年龄由18岁改成22岁
>>> str7 = str7.replace('18', '22') # 语法:replace('旧内容', '新内容')
>>> str7
my name is yafeng, my age is 22!
# 可以指定修改的个数
>>> str7 = 'my name is yafeng, my age is 18!'
>>> str7 = str7.replace('my', 'MY',1) # 只把一个my改为MY
>>> str7
'MY name is yafeng, my age is 18!'
8、isdigit
# 判断字符串是否是纯数字组成,返回结果为True或False
>>> str8 = '1314520'
>>> str8.isdigit()
True
>>> str8 = 'yafeng666'
>>> str8.isdigit()
False
- 字符串了解即可的知识
# 1.find,rfind,index,rindex,count
# 1.1 find:从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1
>>> msg='yafeng say hello'
>>> msg.find('f',1,3) # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引
1
# 1.2 index:同find,但在找不到时会报错
>>> msg.index('n',2,4) # 报错ValueError
# 1.3 rfind与rindex:略
# 1.4 count:统计字符串在大字符串中出现的次数
>>> msg = "hello everyone"
>>> msg.count('e') # 统计字符串e出现的次数
4
>>> msg.count('e',1,6) # 字符串e在索引1~5范围内出现的次数
1
# 2.center,ljust,rjust,zfill
>>> name='yafeng'
>>> name.center(30,'-') # 总宽度为30,字符串居中显示,不够用-填充
-------------yafeng-------------
>>> name.ljust(30,'*') # 总宽度为30,字符串左对齐显示,不够用*填充
yafeng**************************
>>> name.rjust(30,'*') # 总宽度为30,字符串右对齐显示,不够用*填充
**************************yafeng
>>> name.zfill(50) # 总宽度为50,字符串右对齐显示,不够用0填充
00000000000000000000000000000000000000000000yafeng
# 3.expandtabs
>>> name = 'yafeng\thello' # \t表示制表符(tab键)
>>> name
yafeng hello
>>> name.expandtabs(1) # 修改\t制表符代表的空格数
yafeng hello
# 4.captalize,swapcase,title
# 4.1 captalize:首字母大写
>>> message = 'hello everyone nice to meet you!'
>>> message.capitalize()
Hello everyone nice to meet you!
# 4.2 swapcase:大小写翻转
>>> message1 = 'Hi girl, I want make friends with you!'
>>> message1.swapcase()
hI GIRL, i WANT MAKE FRIENDS WITH YOU!
#4.3 title:每个单词的首字母大写
>>> msg = 'dear my friend i miss you very much'
>>> msg.title()
Dear My Friend I Miss You Very Much
# 5.is数字系列
#在python3中
num1 = b'4' #bytes
num2 = u'4' #unicode,python3中无需加u就是unicode
num3 = '四' #中文数字
num4 = 'Ⅳ' #罗马数字
#isdigt:bytes,unicode
>>> num1.isdigit()
True
>>> num2.isdigit()
True
>>> num3.isdigit()
False
>>> num4.isdigit()
False
#isdecimal:uncicode(bytes类型无isdecimal方法)
>>> num2.isdecimal()
True
>>> num3.isdecimal()
False
>>> num4.isdecimal()
False
#isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
>>> num2.isnumeric()
True
>>> num3.isnumeric()
True
>>> num4.isnumeric()
True
# 三者不能判断浮点数
>>> num5 = '4.3'
>>> num5.isdigit()
False
>>> num5.isdecimal()
False
>>> num5.isnumeric()
False
'''
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。
'''
# 6.is其他
>>> name = 'yafeng123'
>>> name.isalnum() #字符串中既可以包含数字也可以包含字母
True
>>> name.isalpha() #字符串中只包含字母
False
>>> name.isidentifier()
True
>>> name.islower() # 字符串是否是纯小写
True
>>> name.isupper() # 字符串是否是纯大写
False
>>> name.isspace() # 字符串是否全是空格
False
>>> name.istitle() # 字符串中的单词首字母是否都是大写
False
列表
定义:在[]内,用逗号分隔开多个任意数据类型的值
l1 = [1,'a',[1,2]] # 本质:l1 = list([1,'a',[1,2]])
列表优先掌握的知识
# 1.按索引存取值(正向存取+反向存取):即可存也可以取
# 1.1 正向取(从左往右)
>>> my_friends=['yafeng','jason','tom',4,5]
>>> my_friends[0]
yafeng
# 1.2 反向取(负号表示从右往左)
>>> my_friends[-1]
5
# 1.3 对于list来说,既可以按照索引取值,又可以按照索引修改指定位置的值,但如果索引不存在则报错
>>> my_friends = ['yafeng','jack','jason',4,5]
>>> my_friends[1] = 'martthow'
>>> my_friends
['yafeng', 'martthow', 'jason', 4, 5]
# 2.切片(顾头不顾尾,步长)
# 2.1 顾头不顾尾:取出索引为0到3的元素
>>> my_friends[0:4]
['yafeng', 'jason', 'tom', 4]
# 2.2 步长:0:4:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2的元素
>>> my_friends[0:4:2]
['yafeng', 'tom']
# 3.长度
>>> len(my_friends)
5
# 4.成员运算in和not in
>>> 'yafeng' in my_friends
True
>>> 'xxx' not in my_friends
True
# 5.添加
# 5.1 append()列表尾部追加元素
>>> l1 = ['a','b','c']
>>> l1.append('d')
>>> l1
['a', 'b', 'c', 'd']
# 5.2 extend()一次性在列表尾部添加多个元素
>>> l1.extend(['a','b','c'])
>>> l1
['a', 'b', 'c', 'd', 'a', 'b', 'c']
# 5.3 insert()在指定位置插入元素
>>> l1.insert(0,"first") # 0表示按索引位置插值
>>> l1
['first', 'a', 'b', 'c', 'alisa', 'a', 'b', 'c']
# 6.删除
# 6.1 del
>>> l = [11,22,33,44]
>>> del l[2] # 删除索引为2的元素
>>> l
[11,22,44]
# 6.2 pop()默认删除列表最后一个元素,并将删除的值返回,括号内可以通过加索引值来指定删除元素
>>> l = [11,22,33,22,44]
>>> res=l.pop()
>>> res
44
>>> res=l.pop(1)
>>> res
22
# 6.3 remove()括号内指名道姓表示要删除哪个元素,没有返回值
>>> l = [11,22,33,22,44]
>>> res=l.remove(22) # 从左往右查找第一个括号内需要删除的元素
>>> print(res)
None