python基础之数据类型及内置方法

一、数字类型

1.整型int:用来记录年龄、等级、号码等

int()可以接收数字和纯数字组成的字符串参数,不能接收浮点数的字符串.

当参数为浮点数时,函数会返回参数的整数部分.当参数是整数字符串时,函数将其转换为整型

定义一个整型变量:
a=27
int

 

2.浮点型float:用来记录身高、体重、工资等

定义一个浮点型变量:
price=11.22
float

 

进制转换:

十进制  ——>二进制  bin(27)   [反向为int("0b11011",2)]

十进制  ——>八进制 och(27)   [反向为int("0o33",8)]

十进制  ——>十六进制  hex(27)  [反向为int("0x1b",16)]

      

二、字符串str:用来记录描述性质状态,如名字、性别等 

用引号('',"",'''''')将内容包含起来赋给变量名,就可以定义一个字符串变量。

只有在全部数据为字符串时,用eval

使用引号将内容包含起来赋给变量名,就可以定义一个字符串变量。定义这两个变量时,实际调用了 str() 函数。
name ='lalal'

当字符串内有引号时,定义的引号需要不能和其相同:

str3 = "hello,I'm lily."

字符串类型可以用运算符进行简单的拼接:
str1 = "hello  "
str2 = "world! "
res = str1+str2

print(res)          #hello  world!
print(res*3)       #hello  world! hello  world! hello  world!

字符串类型之间也可以比较大小:

str1 = "hello  "
str2 = "world! "

print(str1>str2)    #False,根据ASCII码得来. A<Z<a<z

字符串类型并不能和其他数据类型进行拼接和运算
str

 

需要即时掌握的操作
1.strl[0] 按索引取值 
2.strl[1:3:2] 切片(顾头不顾尾,步长)
3.len 长度(统计的是字符个数)
4.in/not in 成员运算 (返回布尔值)
5.strip,lstrip,rstrip 移除空白 
6.split,rsplit 切分.切出来的是列表
7.for i in listl 循环遍历
str1 = "lalal,27,hello world!"
list1 = [
    # str1[0:9:3],  # la2 间隔两个字符切片(步长指定为2,默认为1)
    # str1[:],  # lalal,27,hello world!  起始位置和结束位置默认为0,可以获得一个同样的字符串
    # str1[::-1],  # !dlrow olleh,72,lalal  返回一个倒序字符串
    # str1[-3:],  # ld!  返回后三个字符
    # str1[-1:-5:-1],  # !dlr  起始位置都可以是负值,但切片的方向要和步长一致
    # len(str1),  # 21  返回str1的长度(字符个数),如果len()的参数是列表、元组,则返回元素个数
    # "12" in str1,  # False 成员运算,返回布尔值
    # str1.strip(),  # lalal,27,hello world! 移除str1两端的指定字符,默认为空格 返回一个新的字符串
    # str1.split(",", 2),  # ['lalal', '27', 'hello world!']  此函数接收两个参数:切分字符和个数,返回一个列表
    "0".join(str1.split(",", 2))  # lalal0270hello world! 将切分后的列表元素以指定的字符拼接,原理是字符串拼接+迭代
#
]
for i in list1:
    print(i)
需要即时掌握的操作

 

需要优先掌握的操作
1.lower 将str1内的英文字符转换为大写
2.upper 将str1内的英文字符转换为小写
3.startswith 判断str1是否以"xx"开头,并返回布尔值
4.endswith 判断str1是否以"xx"结尾
5.fomat 格式化输出三种用法(与%:%需要一一对应,相当于第一种用法,数目不匹配报错。)
6.replace 替换
7.join 拼接,相当于for循环,可迭代的对象必须都是字符串
8.isdigit 判断字符是否为"数字",可以判断bytes和unicode类型
9.isinstance 判断...是否是...类型
str1 = "lalal,27,hello world!  "
list1 = [
    str1.lower(),  # lalal,27,hello world!  将str1内的英文字符转换为小写并返回一个新字符串
    str1.upper(),  # LALAL,27,HELLO WORLD!  将str1内的英文字符转换为大写并返回一个新字符串
    str1.startswith("12"),  # False  判断str1是否以"12"开头,并返回布尔值
    str1.endswith("!"),     # False  判断str1是否以"!"结尾,并返回布尔值
    "la{},27,hel{}lo world!  ".format("3", "T"),  # la3,27,helTlo world!  格式化输出:按顺序输出
    "la{1},27,he{0}world!    ".format("3", "T"),  # laT,27,he3world!  格式化输出:指定位置
    "la{x},27,he{y}world!    ".format(x="3", y="T"),  # la3,27,heTworld  格式化输出:指定关键字!
    str1.replace("27", "dz", 1),  # lalal,27,hello world!   replace接收三个参数:原字符,替换字符,替换字数
    str1.isdigit(),  # False 判断str1是否是纯数字字符,返回布尔值
]
for i in list1:
    print(i)
需要优先掌握的操作

 

需要了解的方法
1.count
2.find,rfind
3.index,rindex
4.center,ljust,rjust,zfill 居中,左,右,
5.captalize 首字母大写
6.swapcase
7.title 全大写
str1 = "LalAl,27,heLlo World!    "
list1 = [
    str1.count("l"),  # 4   返回srt1内指定字符的个数,不指定字符则统计整个字符串的字符数  
    str1.find("27"),  # 6  返回指定字符在str1中的索引,如果不存在则返回-1。  rfind()从右向左寻找  
    str1.index("La"), # 0  返回指定字符在str1中的索引,如果不存在则报错。 rindex()从右向左寻找
    str1.center(30, "_"), # __LalAl,27,heLlo World!    ___
    # 返回一个原字符串居中,并使用指定单位字符
    # 填充至指定长度的新字符串。默认填充字符为一个空格。
    # 如果指定的长度小于原字符串的长度则返回原字符串。
    # 类似调整格式的方法还有 左对齐:ljust()  右对齐:rjust()  用0填充:zfill()
    str1.capitalize(),  # Lalal,27,hello world!首字母大写
    str1.swapcase(),  # Lalal,27,hello world!大小写互换
    str1.title()  # Lalal,27,Hello World!  返回英文单词首字母大写的字符串
]
for i in list1:
    print(i)
需要了解的方法

 

 
is数字
1.isdigt:判断bytes,unicode类型
2.isdecimal:uncicode
3.isnumberic:unicode,中文数字,罗马数字
4.isalnum
5.isalpha
6.isidentifier
7.islower,isupper
8.isspace
9.istitle
#is数字系列
#在python3中
num1='4'     #bytes
num2=u'4'    # unicode,python3中无需加u就是unicode
num3=''    # 中文数字
num4=''    # 罗马数字
print(num1,num2,num3,num4)    # 4 4 四 Ⅳ

#isdigt:bytes,unicode
print(num1.isdigit())       # True
print(num2.isdigit())       # True
print(num3.isdigit())       # False
print(num4.isdigit())       # False

#isdecimal:uncicode
#bytes类型无isdecimal方法
print(num2.isdecimal())     # True
print(num3.isdecimal())     # False
print(num4.isdecimal())     # False

#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric())     # True
print(num3.isnumeric())     # True
print(num4.isnumeric())     # True

# 三者不能判断浮点数
num5='4.3'
print(num5.isdigit())       # False
print(num5.isdecimal())     # False
print(num5.isnumeric())     # False

'''
总结:
    最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景。
    如果要判断中文数字或罗马数字,则需要用到isnumeric
'''

# is其他
print('===>')
name='egon123'
print(name.isalnum())      # True 字符串由字母或数字组成
print(name.isalpha())      # False 字符串只由字母组成
print(name.isidentifier()) # True
print(name.islower())      # True
print(name.isupper())      # False
print(name.isspace())      # False
print(name.istitle())      # False
is系列

 

字符串的一些方法,比如按按索引取值、成员运算、切片、返回长度(元素个数)等方法对于列表,字典等数据类型同样适用.

 

 三、列表list:用来记录多个值,用索引对应值,索引反映位置。在[]内以逗号分隔多个任意类型的值

list1=[1,2.1,'lalal',['a','b','c']]

print(type(list1))     #<class 'list'>
print(list1[0])         #1
print(list1[3][0])    #a

当索引超出列表的长度时,就会报错
list的定义用法

 

需要优先掌握的操作
1.listl[0]     按索引取值 
2.listl[1:3:2] 切片(顾头不顾尾,步长)
3.len         长度(统计的是元素个数)
4.in/not in   成员运算 (返回布尔值)
5.append      追加(如果有一个列表,会将其当作一个元素整个追加)
6.insert      插入
7.del         删除(根据索引删)
8.remove      删除(单纯的根据元素名去删)
9.pop        删除(若不指定索引,默认取走最后一个,有返回值,为删掉的值)
10.for i in listl  遍历列表
l = ['a', 'b', 'c', 'd', 'e']

print(l[0], l[0:2:1])  # a ['a', 'b']  按索引取值、切片(返回子列表),与字符串切片方法相同
l[2] = "C"       # 替换索引位置元素
print(l,len(l))  # ['a', 'b', 'C', 'd', 'e'] 5   返回列表与元素个数(长度)
print("a" in l)  # True  in/not in成员运算
l.append("1")  # 列表末尾追加元素,无返回值
print(l)       #['a', 'b', 'c', 'd', 'e', '1']
l.insert(0, 11111)  # 在指定索引位置插入元素IKN
print(l)            #[11111, 'a', 'b', 'c', 'd', 'e']
del l[0]       # 删除
print(l)       #['a', 'b', 'c', 'd', 'e']
l.remove("b")     # 删除指定元素
print(l)          #['a', 'c', 'd', 'e']
l.pop(1)      # 删除指定索引位置元素,并将删除的元素返回。默认索引为-1
print(l)      #['a', 'd', 'e']
for item in l:    # 遍历列表
    print(item)   #a d e
需要优先掌握的操作

 

 
需要掌握的操作
1.count       计数
2.extend      追加(如果有一个列表,会将其按元素逐个添加)
3.index       索引所在位置,可以指定起始范围,若没有该vaule,报错。
4.reverse     倒序
5.sort        排序(从小到大)可以跟匿名
6.join
l = ['a', 'b', 'c', 'd', 'e']

print(l.count("a"))  # 1  返回列表中包含指定元素的个数

l2 = ["!","!"]
l.extend(l2)
print(l)        #  ['a', 'b', 'c', 'd', 'e', '!', '!']  接收一个可迭代对象,将其元素添加到l中,返回None
print(l.extend(12))  # 报错

print(l.index('c'))  # 2  返回指定vaule的索引,可以指定起始范围,若没有该vaule,报错。
l.reverse()  # 反转列表
print(l)     #['e', 'd', 'c', 'b', 'a']
print(l.reverse())   # None

l.sort()  # 将列表中元素按从小到大顺序排序,若指定reverse=True,则倒序
print(l)  # ['a', 'b', 'c', 'd', 'e']
需要掌握的操作

 

1.队列:先进先出
l=[]
l.append('first')
l.append('second')
l.append('third')
print(l)  #['first', 'second', 'third']
print(l.pop(0))  #first
print(l.pop(0))  #second

# 2.堆栈:先进后出
#
l=[]
l.append('1')
l.append('2')
l.append('3')
print(l)  #['1', '2', '3']
print(l.pop(-1))  #3
print(l.pop(-1))  #2
队列、堆栈

 

列表生成式 【i for i in range(10)】 --详情后文讲

 

四、字典dict:在{ }里,用key:vaule的形式存放多个元素,并用,将元素隔开.

字典的key一定是不可变类型(内部需要做hash),因为key起到描述作用,一般是字符串型,vaule可以是任意类型。定义字典调用了 dict()方法,dict() 接收可迭代对象(k, v in iterable)和关键字参数:

d = {'name1':'lalal','name2':'ann','name3':'sha'}

print(d["name1"])        #lalal

字典没有索引,即无序的。用花括号{ } 可以定义一个字典,字典的元素包含键(key)和值(vaule),中间用冒号 :分开。冒号左边是key,一定要用不可变类型,比如字符串,我们可以通过key访问到vaule。
dict的定义用法

 

需要优先掌握的操作
1.dictl['key']   按key取值 
2.len            长度(统计的是元素个数)
3.in/not in      成员运算 (返回布尔值)
4.d.get('key')   按key取值
5.pop
6.del dictl[]    删除(指定key删除,无返回值)
7.键:key  值:values  键值对:items()
8.for i in dic.iteml() 
dict1 = {'name': 'lalal', 'age': 27, 'gender': 'male'}
print(dict1["name"])      #lalal   按key取值
print(dict1.get("age"))   # 27     按key取值,如果不存在这个key则返回None,不会报错

dict1["name"] = "dz"     # 当指定的key存在时,修改对应的vaule。如果不存在,则新增元素。
print(dict1['name'])     # dz

dict1.setdefault("age",20)       # 指定的key存在时,不修改对应的vaule;若不存在,则新增元素。返回值是key对应的vaule
print(dict1)                     #{'name': 'lalal', 'age': 27, 'gender': 'male'}
print(dict1.setdefault("age",20))  # 27

print(dict1.pop("name"))   # lalal  删除key所在的元素,并返回vaule,如果不存在会报错
print(dict1)        #{'age': 27, 'gender': 'male'}

print(dict1.popitem())    # ('gender', 'male')  随机删除一个元素,以元组的形式返回此元素
print(dict1)        #{'name': 'lalal', 'age': 27}

print(dict1.keys())    # 输出键  dict_keys(['name', 'age', 'gender'])  
print(dict1.values())  # 输出值  dict_values(['lalal', 27, 'male'])  
print(dict1.items())   # 输出键值对  dict_items([('name', 'lalal'), ('age', 27), ('gender', 'male')])  

以上三个输出的返回值是可迭代对象,可以用for 遍历出元素

for k in dict1.keys():
    print(k)    # name age gender
for v in dict1.values():
    print(v)     # lalal  27  male

for k, v in dict1.items():
    print(k, v)
# name lalal
# age 27
# gender male
需要优先掌握的操作

 

需要掌握的操作
1.fromkeys     初始化一个字典
2.update       更新字典
3.setdefault 
dict1 = {'name', 'age', 'gender'}
d={}.fromkeys(dict1,None)      # 初始化一个vaule为None的字典
print(d)                    #{'name': None, 'age': None, 'gender': None}

dic1 = {'name': 'lalal', 'age': 27, 'gender': 'male'}
d.update(dic1)   # 更新字典,更新原有key对应的vaule,并增加原来没有的元素
print(d)         #{'gender': 'male', 'name': 'lalal', 'age': 27}
需要掌握(初始化、更新dict)

 

 存多值、无序、可变

 

五、布尔bool:描述两种状态,True、False (注意大小写).

if 3>2:
    print(3>2)                   #  True        
    print(type(3>2))          #<class 'bool'>

所有的数据类型自带bool值

布尔值为False:0,None,空(比如空字符串"",空列表[])
bool的定义用法

 

 所有的数据类型自带bool值,需要注意:

0,None,空(比如空字符串"",空列表[])的布尔值为False

 

六、元组tuple:相当于一个不可变列表,形式上是在()内用,将多个任意类型的元素隔开定义一个元组调用了tuple() 函数,tuple()函数接收一个可迭代对象,将其转换为元组的元素。 

元组可视为不可修改的列表。修改元组内元素会报错,但是:
t=(1,"1",[1,2,3])  # 定义一个元组
t[2][0] = "hello"
print(t)                #(1, '1', ['hello', 2, 3])
元组里的内容的确修改了,实际上,元组内存储的是vaule的地址,修改列表内的元素并不会改变地址
 
tuple的定义用法

 

需要优先掌握的操作
1.tuplel[0]     按索引取值 
2.tuplel[1:3:2]  切片(顾头不顾尾,步长)
3.len           长度(统计的是元素个数)
4.in/not in     成员运算 (返回布尔值)
5.for i in tuplel
t = ['a', 'b', 'c', 'd', 'e']

print(t[0], t[0:2:1])  # a   ['a', 'b']按索引取值、切片(返回子列表),与字符串切片方法相同
t[2] = "C"       # 替换索引位置元素
print(t,len(t))  # ['a', 'b', 'C', 'd', 'e'] 5   返回列表与元素个数(长度)
print("a" in t)  # True  in/not in成员运算
for item in t:    # 遍历列表
    print(item)   #a b C d e
需要优先掌握的操作

 

需要掌握的操作
1.count       计数
2.index       索引所在位置,可以指定起始范围
t = ['a', 'b', 'c', 'd', 'e']
print(t.index('d',1,5))  # 3  找到索引d在元组(范围1~5)中所在的位置,
print(t.count('a'))      #1  计a的个数
需要掌握的操作

 

存多值、有序、不可变

 

七、集合set:用{ }的形式表示,内部元素用 , 分隔

集合的主要用途:I关系运算  II去重(局限性:1.只针对不可变类型 2.不能保证原来顺序,可用set.index)

集合是无序的,其中的元素必须是不可变类型,并且没有重复元素。定义集合会调用 set() 函数,该函数会生成一个集合,去除重复元素。

set1 = set([1, 'a', 'b'])
set2 = set("hello")
print(set1, set2)   #{1, 'a', 'b'} {'e', 'o', 'h', 'l'}
set的定义用法

 

  

需要优先掌握的操作
1.len           长度(统计的是元素个数)
2.in/not in     成员运算 (返回布尔值)
3.| 合集
4.& 交集
5.- 差集
6.^ 对称差集
7.==
8.>=父集
9.<=子集
s1 = {"","","",""}
s2 = {"","","",""}

print(s1|s2)    # 并集  {'王', '李', '赵', '钱', '张', '孙'}
print(s1&s2)    # 交集  {'李', '赵'}
print(s1-s2)    # 差集  {'王', '张'}
print(s2-s1)    #{'钱', '孙'}
print(s1^s2)    # {'王', '钱', '张', '孙'} 对称差集:没有同时存在与s1和s2的元素

print(s1==s2)   # False   判断两集合是否相等
print(s2>=s1)   # False   判断s2是否包含s1(s2是否为s1的父集)(s1是否为s2的子集)
print(s2<=s1)   # False   
需要优先掌握的操作

 

需要掌握的操作
1.update
2.pop
3.remove
4.discard
s1 = {"","","",""}

print(len(s1))      #4
print(s1.pop())     #

s1.add("")          # 添加元素,无返回值。
print(s1)             #{'王', '刘', '张', '李', '赵'}
s1.update('')     # 更新集合,无返回值
print(s1)           #{'李', '钱', '赵', '王', '张'

s1.remove('')     #移除,无返回值。删除集合中没有的元素时会报错
print(s1)           #{'李', '张', '赵'}
s1.discard('')      #移除,无返回值。删除集合中没有的元素时不会报错
print(s1)             #{'李', '赵', '王'}
需要掌握的操作

 

存多值、无序、可变

 

八、None:代表没有任何东西,它甚至没有任何类型

None的定义用法
print(type(None)) # <class 'NoneType'>

 

类型小结

1)按存值个数分
存单个(标量/原子类型):字符串
存多个(容器类型):列表、元组、字典(、集合)

2)按可变不可变分
可变:列表、字典、可变集合
不可变:数字、字符串、元组、不可变集合

(set —— 可变集合。集合中的元素可以动态的增加或删除。frozenset —— 不可变集合。集合中的元素不可改变。)

3)按访问顺序分
直接取:数字
索引取:字符串、列表、元组
key取: 字典

4)按有无序分
有序:列表、元组、字符串
无序:字典、集合

5)按存储空间的占用分(从低到高)

数字

字符串

集合:无序,即无序存索引相关信息

元组:有序,需要存索引相关信息,不可变

列表:有序,需要存索引相关信息,可变,需要处理数据的增删改

字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

posted @ 2019-05-14 15:48  呔!妖精。。。  阅读(241)  评论(0编辑  收藏  举报