数据类型
什么是数据?
x=18,18是我们想要存储的数据
为何数据要分不同的类型
数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示
数据类型
可变类型与不可变类型
可变:在id不变的情况,值可以改变
不可变:值不变,id不变
- 数字(整形,长整形,浮点型,复数)
- 字符串
- 字节串:在介绍字符编码时介绍字节bytes类型
- 列表
- 元组
- 字典
- 集合
布尔类型bool:True,False
布尔类型bool
所有数据类型,自带布尔值
只有三种类型的值为False
0
None
空:'',[],{}
其余全部为真(True)
数字
整形int
作用:用来表示年龄,等级,证件号等整数相关的
定义: age=18 #实质age=int(18)
浮点型float
作用:用来表示工资,身高,体重参数等有小数相关的
定义: salary=180.25 #实质salary=float(180.25)
字符串(str)
- 作用:用来表示名字、性别、地址等信息
定义:在单引号、双引号或者三引号内,由一串字符组成
name='jack' #name=str('jack')
基本使用
1、按索引取值(正向取+反向取) :只能取
- 索引取值从0开始算起
>>>name='Hello jack'
>>>print(name[0])
H
>>>print(name[6])
o
>>>print(name[-1])
k
2、切片(顾头不顾尾,步长)
- 取出我们想要部分的字符串
>>>res='my name is jack'
>>>print(res[0:7])
my name
>>>print(res[3:7])
name
>>>print(res[0:7:2]) #步长:每几个中取出一个
m ae
3、长度len
- 统计字符的长度个数len(str)
>>>res='my name is jack'
>>>print(len(res))
15
4、移除空白strip
- strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法:str.strip(str='')str -- 去除符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
- str.stiip()默认不加参数为去除两边空格
- str.lstrip()默认不加参数为去除左边空格
- str.rstrip()默认不加参数为去除右边空格
>>>name='##jack####'
>>>print(name.strip('#')) #去除两边的符号
jack
>>>print(name.lstrip('#')) #去除左边的符号
jack####
>>>print(name.rstrip('#')) #去除右边的符号
##jack
>>>name=' jack '
>>>print(name.strip()) #去除两边的空格
jack
5、切分split
- split() 通过指定分隔符对字符串进行切片
语法:str.split(str='',num)
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。默认为 -1, 即分隔所有。
- 用法 str.split()从左边开始像右边切除将其分成一列表的形式
- 用法 str.rsplit()从右边开始像左边切除将其分成一列表的形式
>>>res1='jack:18:age'
>>>res2=res1.split(':') #以:形式切除所有位置
>>>res3=res1.split(':',1) #切除左边一个位置
>>>res4=res1.rsplit(':',1) #切除右边一个位置
>>>print(res2)
['jack', '18', 'age']
>>>print(res3)
['jack', '18:age']
>>>print(res4)
['jack:18', 'age']
6、连接join
- join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
语法:str.join(sequence) sequence -- 要连接的元素序列。
- 用法: join方法传入的列表必须只包含str类型的元素: ''.join(str)
>>>l=['jack', '18', 'age']
>>>res=''.join(l) #以空格将其连接成字符串
>>>print(res)
jack18age
>>>res2=':'.join(l) #以:将其连接成字符串
>>>print(res2)
jack:18:age
7、成员运算in和not in
- 判断元素在不在其里面
在里面则返回True ,否则返回False
>>>res='my name is jack'
>>>print('jack' in res)
True
>>>print('jack' not in res)
False
8、 format 格式化输出
- str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
按默认位置传值
>>>s1='my name is %s my age is %s' %('jack',18)
>>>s2='my name is {} my age is {}'.format('jack',18)
>>>print(s1)
my name is jack my age is 18
>>>print(s2)
my name is jack my age is 18
按指定位置传值
>>>s1='my name is {0} my age is {1}'.format('jack',18)
>>>s2='my name is {1} my age is {0}'.format(18,'jack')
>>>s3='my name is {name} my age is {age}'.format(age=18,name='jack')
>>>print(s1)
my name is jack my age is 18
>>>print(s1)
my name is jack my age is 18
>>>print(s3)
my name is jack my age is 18
数字格式化
下表展示了 str.format() 格式化数字的多种方法
>>> print("{:.2f}".format(3.1415926));
3.14
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零(填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x(填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x(填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
9、大小写字符转换
- lower将字母转换成小写 语法:str.lower()
- upper将字母转换成大写 语法:str.upper()
>>>print('JACK'.lower())
jack
>>>print('jack'.upper())
JACK
10、字符串的替换replace
- replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
语法:str.replace(old, new[, max])
>>>res='hello jack jack'
>>>print(res.replace('jack','jie'))
hello jie jie
>>>print(res.replace('jack','jie',1))
hello jie jack
总结字符串类型
存一个值
只能存一个值有序or无序
有序可变or不可变
!!!不可变:值变,id就变。不可变==可hash
列表(list)
- 作用:多个爱好,多门课程,存放多个值
定义:[]内可以有多个任意类型的值,逗号分隔
list1=['h','e','l','l','o'] #等同于list1=list('hello')
基本使用常规操作
1、按索引存取值(正向存取+反向存取):即可改也可以取
>>>list1=['h','e','l','l','o']
>>>print(list1[1])
e
>>>print(list1[-1])
o
>>>list1[1]='w'
>>>print(list1)
['h', 'w', 'l', 'l', 'o']
>>>print(list1[1])
w
2、切片(顾头不顾尾,步长)
>>>l=['name','jack','age','18','python']
>>>print(l[0:2])
['name', 'jack']
>>>print(l[0:4:2])
['name', 'jack']
3、长度len
>>>l=['name','jack','age','18','python']
>>>print(len(l))
5
4、成员运算in和not in
>>>l=['name','jack','age','18','python']
>>>print('python' in l)
True
5、列表值的增加
列表末尾追加appen
- append() 方法用于在列表末尾添加新的对象。
语法:list.append(obj) obj -- 添加到列表末尾的对象。
>>>l=['name','jack','age','18']
>>>l.append('python')
>>>print(l)
['name', 'jack', 'age', '18', 'python']
列表指定位置插入insert
- insert() 函数用于将指定对象插入列表的指定位置。
语法:list.insert(index, obj)
index -- 对象 obj 需要插入的索引位置。
obj -- 要插入列表中的对象。
>>>l=['name','jack','age','18']
>>>l.insert(2,'python')
>>>print(l)
['name', 'jack', 'python', 'age', '18']
6、列表值的删除
有返回值的删除pop()
- pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
语法:list.pop([index])
index-- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值
>>>l=['name','jack','age','18','python']
>>>l.pop() # 默认删除末尾
'python'
>>>print(l)
['name', 'jack', 'age', '18']
没有返回值的删除remove()
- remove() 函数用于移除列表中某个值的第一个匹配项。
语法:list.remove(obj) obj -- 列表中要移除的对象,指定要删除的对象。
>>>l=['name','jack','age','18','python']
>>>l.remove('python')
>>>print(l)
['name', 'jack', 'age', '18']
7、反向输出元素
- reverse() 函数用于反向列表中元素。
语法:list.reverse()
>>>l=['name','jack','age','18','python']
>>>print(l.reverse())
['python', '18', 'age', 'jack', 'name']
8、列表排序
- sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:list.sort(cmp=None, key=None, reverse=False)
cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
>>> l=[1,5,2,9,6,8]
>>> l.sort()
>>> print(l)
[1, 2, 5, 6, 8, 9]
>>>l.sort(reverse=True)
>>>print(l)
[9, 8, 6, 5, 2, 1]
9、统计元素出现次数
- count() 方法用于统计某个元素在列表中出现的次数。
语法:list.count(obj) obj -- 列表中统计的对象。
>>>l=['hello','jack',18,'jack']
>>>l.count('jack')
2
10、查看元素出现的位置(索引)
- index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法:list.index(obj) obj--查找的元素
>>>l=['hello','jack',18,'jack']
>>>l.index('jack')
1
>>>l.index(18,1,3)
2
11、循环
依赖索引
l=['name','jack','age','18','python']
i=0
while i < len(l):
print(l[i])
i+=1
依次取出列表的元素
for i in range(len(l)):
print(i,l[i])
不依赖索引
for item in l:
print(item)
补充for循环
for i in range(0,5,2): #0 2 4
print(i)
for i in range(10): #默认从零起始
print(i)
for i in range(10,-2,-1): # 10 9 8 ...
print(i)
总结列表类型
- 存多个值
- 有序
- 可变
元组(tuple)
- 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
定义:t=(1,2,3,4) 实质是t=tuple((1,2,3,4))
1、按索引取值(正向取+反向取):只能取
>>>t=('abc')
>>>t[0]
1
>>>t[-1]
4
2、切片(顾头不顾尾,步长)
>>>t=(1,2,3,4,5,6,7,8)
>>>t[0:3]
(1, 2, 3)
>>>t[0:5:2] # 每两个取一个
(1, 3, 5)
3、长度len
>>>t=(1,2,3,4)
>>>len(t)
4
4、成员运算in和not in
>>>t=(1,2,3,4)
>>>print(1 in t)
True
5、统计元素出现次数
- count() 方法用于统计某个元素在列表中出现的次数。
语法:tuple.count(obj) obj -- 列表中统计的对象。
>>>t=(1,2,3,5,1,12,1,2)
>>> t.count(1)
3
6、查看元素出现的位置(索引)
- index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法:tuple.index(obj) obj--查找的元素
>>>t=(1,2,3,5,1,12,1,2)
>>>t.index(3)
2
该类型总结
- 存多个值
- 有序
- 不可变
字典(dict)
- 作用:存多个值,key-value存取,取值速度快
定义:{}内以逗号分隔多个元素,格式为key:value,
key必须是不可变类型,value可以是任意类型
- dic={'name':'jack','age':18,'sex':'male'} #本质dic=dict({....})
或 - dic=dict(name='egon',age=18,sex='male')
或 - dic=dict([['name','egon'],('age',18)])
1、按key存取值:可存可取可改
>>>dic={'name':'jack'}
>>>dic['age']=18
>>>print(dic)
{'name': 'jack', 'age': 18}
>>>print(dic['name'])
jack
>>>dic['name']='JACK'
>>>print(dic)
{'name': 'JACK', 'age': 18}
2、长度len
- 字典长度为计算键值key的长度
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>len(dic)
3
3、成员运算in和not in
- 判断的字典的key
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>print('name' in dic)
True
>>>print('jack' in dic)
False
4、删除值
有返回值的删除pop
- 存在key时则返回key对应的value,若不存在则返回自定义的
定义dic.pop(key,None) key--为字典的k,None--当对象不存在时返回的值
1. 当key存在时
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>res=dic.pop('name')
>>>print(res)
jack
>>>print(dic)
{'age': 18, 'sex': 'male'}
2. 当key不存在时
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>res=dic.pop('xxx','key不存在')
>>>print(res)
'key不存在'
>>>print(dic)
{'name': 'jack', 'age': 18, 'sex': 'male'}
没有返回值的删除
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>del dic['age']
>>>print(dic)
{'name': 'jack', 'sex': 'male'}
删除整个字典del
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>del dic
5、键keys(),值values(),键值对items()
- 依次取出健跟值
>>>dic={'name':'jack','age':18}
>>>print(dic.keys()) #看字典中有那些健key
dict_keys(['name', 'age'])
>>>print(dic.values()) #查看字典中有哪些值value
dict_values(['jack', 18])
>>>print(dic.items()) #查看键值对应以关系
dict_items([('name', 'jack'), ('age', 18)])
- 用循环遍历取值
dic={'name':'jack','age':18}
for key in dic.keys(): #只取出健key
print(key)
for value in dic.values(): #只取出字典的值value
print(value)
for k,v in dic.items(): #k,v=('name', 'jack')
print(k,v)
6、字典更新修改
- 对与老字典来说,更新指的是,新字典中有而老字典中没有则添加,新有而老有,则覆盖
定义;dict.update({key:value})
>>>dic={'name':'jack','age':18}
>>>dic.update({'age':20,'sex':'male'})
>>>print(dic)
{'name': 'jack', 'age': 20, 'sex': 'male'}
7、setdefaul的用处
1、字典有中有key,则不修改,返回原key对应的原值
>>>dic={'name':'jack','age':18}
>>>res=dic.setdefault('name','JACK')
>>>print('返回值:',res)
返回值: jack
>>>print(dic)
{'name': 'jack', 'age': 18}
2、没有对应的key,则添加,返回添加的key对应的value
>>>dic={'name':'jack'}
>>>res=dic.setdefault('age',18)
>>>print('返回值:',res)
返回值: 18
>>>print(dic)
{'name': 'jack', 'age': 18}
字典类型总结
- 存多个值
- 无序
- 可变
集合(set)
- 集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
- 作用:去重,集合内没有相同的元素
1、去重
>>>s={'python','orcl','web','python'}
>>>print(s)
{'web', 'python', 'orcl'}
2、集合运算关系
1、交集('&')
- 即学习了python又学习了web的人(学习了相同课程的人)
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a & b)
{'python', 'web'}
2、并集('|')
- 所有学习的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a | b)
{'orcl', 'mysql', 'web', 'C语言', 'linux', 'python'}
3、差集('-')
- 只有a中才有的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a - b)
{'linux', 'mysql'}
4、交叉补集('^')
- 没有被同时学习的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a ^ b)
{'orcl', 'mysql', 'C语言', 'linux'}
3、长度len
>>>a={'python','linux','web','mysql'}
>>>len(a)
4
4、成员运算in 和not in
>>>s={1,2,3,4,5,6}
>>>print(1 in s)
True
5、增加值
1.一次添加一个值(add())
定义:set.add(ord) ord--添加得对象
>>>s={'a','b','c'}
>>>s.add('d')
>>>print(s)
{'c', 'b', 'd', 'a'}
2.一次添加多个值(update())
- 定义:set.update({})
>>>s={'a','b','c'}
>>>s.update({1,2,3})
>>>print(s)
{'c', 1, 2, 3, 'b', 'a'}
6、删除值
1.pop()随机删除一个
>>>s={'a','b','c'}
>>>s.pop() #随机删除其中一个值a,b或者c
>>>print(s)
{'b', 'a'} 或 {'a','c'} 或 {'b','c'}
2.discard() 当删除的元素不存在的时候,不会报错
>>>s={'a','b','c'}
>>> s.discard('d') #不会报错程序正常执行
>>>print(s)
{'c', 'b', 'a'}
>>>s.discard('a') #删除元素a
{'c', 'b'}
3.remove() 当删除的元素不存在的时候,报错
>>>s={'a','b','c'}
>>>s.remove('d') #程序报错找不到值抛出异常
>>>s.remove('b') # 删除元素b
>>>print(s)
{'c', 'a'}
总结集合类型
- 无序
- 不可变
没有重复的值
---恢复内容结束---
# 数据类型什么是数据?
x=18,18是我们想要存储的数据
为何数据要分不同的类型
数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示
数据类型
可变类型与不可变类型
可变:在id不变的情况,值可以改变
不可变:值不变,id不变
- 数字(整形,长整形,浮点型,复数)
- 字符串
- 字节串:在介绍字符编码时介绍字节bytes类型
- 列表
- 元组
- 字典
- 集合
布尔类型bool:True,False
布尔类型bool
所有数据类型,自带布尔值
只有三种类型的值为False
0
None
空:'',[],{}
其余全部为真(True)
数字
整形int
作用:用来表示年龄,等级,证件号等整数相关的
定义: age=18 #实质age=int(18)
浮点型float
作用:用来表示工资,身高,体重参数等有小数相关的
定义: salary=180.25 #实质salary=float(180.25)
字符串(str)
- 作用:用来表示名字、性别、地址等信息
定义:在单引号、双引号或者三引号内,由一串字符组成
name='jack' #name=str('jack')
基本使用
1、按索引取值(正向取+反向取) :只能取
- 索引取值从0开始算起
>>>name='Hello jack'
>>>print(name[0])
H
>>>print(name[6])
o
>>>print(name[-1])
k
2、切片(顾头不顾尾,步长)
- 取出我们想要部分的字符串
>>>res='my name is jack'
>>>print(res[0:7])
my name
>>>print(res[3:7])
name
>>>print(res[0:7:2]) #步长:每几个中取出一个
m ae
3、长度len
- 统计字符的长度个数len(str)
>>>res='my name is jack'
>>>print(len(res))
15
4、移除空白strip
- strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法:str.strip(str='')str -- 去除符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
- str.stiip()默认不加参数为去除两边空格
- str.lstrip()默认不加参数为去除左边空格
- str.rstrip()默认不加参数为去除右边空格
>>>name='##jack####'
>>>print(name.strip('#')) #去除两边的符号
jack
>>>print(name.lstrip('#')) #去除左边的符号
jack####
>>>print(name.rstrip('#')) #去除右边的符号
##jack
>>>name=' jack '
>>>print(name.strip()) #去除两边的空格
jack
5、切分split
- split() 通过指定分隔符对字符串进行切片
语法:str.split(str='',num)
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。默认为 -1, 即分隔所有。
- 用法 str.split()从左边开始像右边切除将其分成一列表的形式
- 用法 str.rsplit()从右边开始像左边切除将其分成一列表的形式
>>>res1='jack:18:age'
>>>res2=res1.split(':') #以:形式切除所有位置
>>>res3=res1.split(':',1) #切除左边一个位置
>>>res4=res1.rsplit(':',1) #切除右边一个位置
>>>print(res2)
['jack', '18', 'age']
>>>print(res3)
['jack', '18:age']
>>>print(res4)
['jack:18', 'age']
6、连接join
- join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
语法:str.join(sequence) sequence -- 要连接的元素序列。
- 用法: join方法传入的列表必须只包含str类型的元素: ''.join(str)
>>>l=['jack', '18', 'age']
>>>res=''.join(l) #以空格将其连接成字符串
>>>print(res)
jack18age
>>>res2=':'.join(l) #以:将其连接成字符串
>>>print(res2)
jack:18:age
7、成员运算in和not in
- 判断元素在不在其里面
在里面则返回True ,否则返回False
>>>res='my name is jack'
>>>print('jack' in res)
True
>>>print('jack' not in res)
False
8、 format 格式化输出
- str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
按默认位置传值
>>>s1='my name is %s my age is %s' %('jack',18)
>>>s2='my name is {} my age is {}'.format('jack',18)
>>>print(s1)
my name is jack my age is 18
>>>print(s2)
my name is jack my age is 18
按指定位置传值
>>>s1='my name is {0} my age is {1}'.format('jack',18)
>>>s2='my name is {1} my age is {0}'.format(18,'jack')
>>>s3='my name is {name} my age is {age}'.format(age=18,name='jack')
>>>print(s1)
my name is jack my age is 18
>>>print(s1)
my name is jack my age is 18
>>>print(s3)
my name is jack my age is 18
数字格式化
下表展示了 str.format() 格式化数字的多种方法
>>> print("{:.2f}".format(3.1415926));
3.14
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零(填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x(填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x(填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
9、大小写字符转换
- lower将字母转换成小写 语法:str.lower()
- upper将字母转换成大写 语法:str.upper()
>>>print('JACK'.lower())
jack
>>>print('jack'.upper())
JACK
10、字符串的替换replace
- replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
语法:str.replace(old, new[, max])
>>>res='hello jack jack'
>>>print(res.replace('jack','jie'))
hello jie jie
>>>print(res.replace('jack','jie',1))
hello jie jack
总结字符串类型
存一个值
只能存一个值有序or无序
有序可变or不可变
!!!不可变:值变,id就变。不可变==可hash
列表(list)
- 作用:多个爱好,多门课程,存放多个值
定义:[]内可以有多个任意类型的值,逗号分隔
list1=['h','e','l','l','o'] #等同于list1=list('hello')
基本使用常规操作
1、按索引存取值(正向存取+反向存取):即可改也可以取
>>>list1=['h','e','l','l','o']
>>>print(list1[1])
e
>>>print(list1[-1])
o
>>>list1[1]='w'
>>>print(list1)
['h', 'w', 'l', 'l', 'o']
>>>print(list1[1])
w
2、切片(顾头不顾尾,步长)
>>>l=['name','jack','age','18','python']
>>>print(l[0:2])
['name', 'jack']
>>>print(l[0:4:2])
['name', 'jack']
3、长度len
>>>l=['name','jack','age','18','python']
>>>print(len(l))
5
4、成员运算in和not in
>>>l=['name','jack','age','18','python']
>>>print('python' in l)
True
5、列表值的增加
列表末尾追加appen
- append() 方法用于在列表末尾添加新的对象。
语法:list.append(obj) obj -- 添加到列表末尾的对象。
>>>l=['name','jack','age','18']
>>>l.append('python')
>>>print(l)
['name', 'jack', 'age', '18', 'python']
列表指定位置插入insert
- insert() 函数用于将指定对象插入列表的指定位置。
语法:list.insert(index, obj)
index -- 对象 obj 需要插入的索引位置。
obj -- 要插入列表中的对象。
>>>l=['name','jack','age','18']
>>>l.insert(2,'python')
>>>print(l)
['name', 'jack', 'python', 'age', '18']
6、列表值的删除
有返回值的删除pop()
- pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
语法:list.pop([index])
index-- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值
>>>l=['name','jack','age','18','python']
>>>l.pop() # 默认删除末尾
'python'
>>>print(l)
['name', 'jack', 'age', '18']
没有返回值的删除remove()
- remove() 函数用于移除列表中某个值的第一个匹配项。
语法:list.remove(obj) obj -- 列表中要移除的对象,指定要删除的对象。
>>>l=['name','jack','age','18','python']
>>>l.remove('python')
>>>print(l)
['name', 'jack', 'age', '18']
7、反向输出元素
- reverse() 函数用于反向列表中元素。
语法:list.reverse()
>>>l=['name','jack','age','18','python']
>>>print(l.reverse())
['python', '18', 'age', 'jack', 'name']
8、列表排序
- sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法:list.sort(cmp=None, key=None, reverse=False)
cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
>>> l=[1,5,2,9,6,8]
>>> l.sort()
>>> print(l)
[1, 2, 5, 6, 8, 9]
>>>l.sort(reverse=True)
>>>print(l)
[9, 8, 6, 5, 2, 1]
9、统计元素出现次数
- count() 方法用于统计某个元素在列表中出现的次数。
语法:list.count(obj) obj -- 列表中统计的对象。
>>>l=['hello','jack',18,'jack']
>>>l.count('jack')
2
10、查看元素出现的位置(索引)
- index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法:list.index(obj) obj--查找的元素
>>>l=['hello','jack',18,'jack']
>>>l.index('jack')
1
>>>l.index(18,1,3)
2
11、循环
依赖索引
l=['name','jack','age','18','python']
i=0
while i < len(l):
print(l[i])
i+=1
依次取出列表的元素
for i in range(len(l)):
print(i,l[i])
不依赖索引
for item in l:
print(item)
补充for循环
for i in range(0,5,2): #0 2 4
print(i)
for i in range(10): #默认从零起始
print(i)
for i in range(10,-2,-1): # 10 9 8 ...
print(i)
总结列表类型
- 存多个值
- 有序
- 可变
元组(tuple)
- 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
定义:t=(1,2,3,4) 实质是t=tuple((1,2,3,4))
1、按索引取值(正向取+反向取):只能取
>>>t=('abc')
>>>t[0]
1
>>>t[-1]
4
2、切片(顾头不顾尾,步长)
>>>t=(1,2,3,4,5,6,7,8)
>>>t[0:3]
(1, 2, 3)
>>>t[0:5:2] # 每两个取一个
(1, 3, 5)
3、长度len
>>>t=(1,2,3,4)
>>>len(t)
4
4、成员运算in和not in
>>>t=(1,2,3,4)
>>>print(1 in t)
True
5、统计元素出现次数
- count() 方法用于统计某个元素在列表中出现的次数。
语法:tuple.count(obj) obj -- 列表中统计的对象。
>>>t=(1,2,3,5,1,12,1,2)
>>> t.count(1)
3
6、查看元素出现的位置(索引)
- index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法:tuple.index(obj) obj--查找的元素
>>>t=(1,2,3,5,1,12,1,2)
>>>t.index(3)
2
该类型总结
- 存多个值
- 有序
- 不可变
字典(dict)
- 作用:存多个值,key-value存取,取值速度快
定义:{}内以逗号分隔多个元素,格式为key:value,
key必须是不可变类型,value可以是任意类型
- dic={'name':'jack','age':18,'sex':'male'} #本质dic=dict({....})
或 - dic=dict(name='egon',age=18,sex='male')
或 - dic=dict([['name','egon'],('age',18)])
1、按key存取值:可存可取可改
>>>dic={'name':'jack'}
>>>dic['age']=18
>>>print(dic)
{'name': 'jack', 'age': 18}
>>>print(dic['name'])
jack
>>>dic['name']='JACK'
>>>print(dic)
{'name': 'JACK', 'age': 18}
2、长度len
- 字典长度为计算键值key的长度
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>len(dic)
3
3、成员运算in和not in
- 判断的字典的key
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>print('name' in dic)
True
>>>print('jack' in dic)
False
4、删除值
有返回值的删除pop
- 存在key时则返回key对应的value,若不存在则返回自定义的
定义dic.pop(key,None) key--为字典的k,None--当对象不存在时返回的值
1. 当key存在时
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>res=dic.pop('name')
>>>print(res)
jack
>>>print(dic)
{'age': 18, 'sex': 'male'}
2. 当key不存在时
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>res=dic.pop('xxx','key不存在')
>>>print(res)
'key不存在'
>>>print(dic)
{'name': 'jack', 'age': 18, 'sex': 'male'}
没有返回值的删除
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>del dic['age']
>>>print(dic)
{'name': 'jack', 'sex': 'male'}
删除整个字典del
>>>dic={'name':'jack','age':18,'sex':'male'}
>>>del dic
5、键keys(),值values(),键值对items()
- 依次取出健跟值
>>>dic={'name':'jack','age':18}
>>>print(dic.keys()) #看字典中有那些健key
dict_keys(['name', 'age'])
>>>print(dic.values()) #查看字典中有哪些值value
dict_values(['jack', 18])
>>>print(dic.items()) #查看键值对应以关系
dict_items([('name', 'jack'), ('age', 18)])
- 用循环遍历取值
dic={'name':'jack','age':18}
for key in dic.keys(): #只取出健key
print(key)
for value in dic.values(): #只取出字典的值value
print(value)
for k,v in dic.items(): #k,v=('name', 'jack')
print(k,v)
6、字典更新修改
- 对与老字典来说,更新指的是,新字典中有而老字典中没有则添加,新有而老有,则覆盖
定义;dict.update({key:value})
>>>dic={'name':'jack','age':18}
>>>dic.update({'age':20,'sex':'male'})
>>>print(dic)
{'name': 'jack', 'age': 20, 'sex': 'male'}
7、setdefaul的用处
1、字典有中有key,则不修改,返回原key对应的原值
>>>dic={'name':'jack','age':18}
>>>res=dic.setdefault('name','JACK')
>>>print('返回值:',res)
返回值: jack
>>>print(dic)
{'name': 'jack', 'age': 18}
2、没有对应的key,则添加,返回添加的key对应的value
>>>dic={'name':'jack'}
>>>res=dic.setdefault('age',18)
>>>print('返回值:',res)
返回值: 18
>>>print(dic)
{'name': 'jack', 'age': 18}
字典类型总结
- 存多个值
- 无序
- 可变
集合(set)
- 集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
- 作用:去重,集合内没有相同的元素
1、去重
>>>s={'python','orcl','web','python'}
>>>print(s)
{'web', 'python', 'orcl'}
2、集合运算关系
1、交集('&')
- 即学习了python又学习了web的人(学习了相同课程的人)
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a & b)
{'python', 'web'}
2、并集('|')
- 所有学习的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a | b)
{'orcl', 'mysql', 'web', 'C语言', 'linux', 'python'}
3、差集('-')
- 只有a中才有的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a - b)
{'linux', 'mysql'}
4、交叉补集('^')
- 没有被同时学习的课程
>>>a={'python','linux','web','mysql'}
>>>b={'C语言','python','orcl','web'}
>>>print(a ^ b)
{'orcl', 'mysql', 'C语言', 'linux'}
3、长度len
>>>a={'python','linux','web','mysql'}
>>>len(a)
4
4、成员运算in 和not in
>>>s={1,2,3,4,5,6}
>>>print(1 in s)
True
5、增加值
1.一次添加一个值(add())
定义:set.add(ord) ord--添加得对象
>>>s={'a','b','c'}
>>>s.add('d')
>>>print(s)
{'c', 'b', 'd', 'a'}
2.一次添加多个值(update())
- 定义:set.update({})
>>>s={'a','b','c'}
>>>s.update({1,2,3})
>>>print(s)
{'c', 1, 2, 3, 'b', 'a'}
6、删除值
1.pop()随机删除一个
>>>s={'a','b','c'}
>>>s.pop() #随机删除其中一个值a,b或者c
>>>print(s)
{'b', 'a'} 或 {'a','c'} 或 {'b','c'}
2.discard() 当删除的元素不存在的时候,不会报错
>>>s={'a','b','c'}
>>> s.discard('d') #不会报错程序正常执行
>>>print(s)
{'c', 'b', 'a'}
>>>s.discard('a') #删除元素a
{'c', 'b'}
3.remove() 当删除的元素不存在的时候,报错
>>>s={'a','b','c'}
>>>s.remove('d') #程序报错找不到值抛出异常
>>>s.remove('b') # 删除元素b
>>>print(s)
{'c', 'a'}
总结集合类型
- 无序
- 不可变
- 没有重复的值