7、容器数据类型拓展

Python入门 / 2020-10-13

类型存一个值还是多个值,多个值的称为容器类型

前面有讲到列表和字典的基础知识,这次来做一次知识拓展!

1、列表:list

1.1、作用

按索引位置存放多个值,便于取出其中一个元素;比较适合存放多个同类型数据,比如说一个班级上所有学生姓名!

1.2、定义

中括号内用逗号分隔开的多个任意值均被视为列表内的元素!

1.3、类型转换

但凡能被for循环遍历的数据类型都可以当做参数被list()转成列表,因此l=[1,2,3]其实调用的是l.list([1,2,3])。

1.4、内嵌方法

1.4.1、按索引存取值
取值:
>>> l=[1,4,7]
>>> print(l[0],l[1],l[2])
1 4 7
修改:

列表属于可变数据类型,因此索引存在则可修改索引对应的值!

>>> l[0]=6
>>> l
[6, 4, 7]
不存在则报错

索引不存在则提示语法错误,别妄想不存在的就直接追加!

>>> l[3]=666
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
1.4.2、切片

跟此前字符串拓展一样的操作,切片也是拷贝,相当于浅拷贝!

>>> sanxi=l[:]
>>> sanxi
[6, 4, 7]
1.4.3、统计元素数量len

也是len,用法跟字符串一样

>>> len(sanxi)
3
1.4.4、成员运算

同字符串,也是in和not in

>>> 6 in sanxi
True
>>> 5 in sanxi
False
1.4.5、为列表添加新值

添加新值有三种,一种是追加,一种是插入式,一种是移植列表

追加式:append()

固定为末尾处新增,如果想别的位置新增那不叫追加,叫插入!

>>> sanxi.append(666)
>>> sanxi
[6, 4, 7, 666]

​ 顺带提一嘴,很多用法仅需要在pycharm等集成环境中键入部分字符即可获得语法提示!

插入式:insert()

指定位置插入新元素

>>> sanxi.insert(1,'haha')
>>> sanxi
[6, 'haha', 4, 7, 666]
#insert首先跟要插入的索引号位置,接着要插入的元素
移植列表:extend()

取一个列表的值添加到另一个列表中;但是需要注意的是如果extend移植的不是列表而是不可变类型数据,则会将改值拆分成一个个字符再添加进去,如下所示:

>>> sanxi=[1,2,3]
>>> gaga=[6,7,8]
>>> sanxi.extend(gaga)
>>> sanxi
[1, 2, 3, 6, 7, 8]
#如果是不可变类型,则如下面一样,拆分成单个字符
>>> haha='baga'
>>> sanxi.extend(haha)
>>> sanxi
[1, 2, 3, 6, 7, 8, 'b', 'a', 'g', 'a']
1.4.6、删除列表中的元素

删除也分三种,如下:

del()

根据给定的索引号直接删除对应的元素;这并非列表内嵌方式,是个通用的方法;此方式没有返回值提示你值被删除,需要自己重新打印等来显示!

>>> del sanxi[6:9]
>>> sanxi
[1, 2, 3, 6, 7, 8, 'a']
#为什么最后面的a没被删除,不要忘记了Python有始无终哈!
pop()

删完后会打印被删掉的那个值,不指定则默认删除末尾元素!

>>> sanxi.pop(6)
'a'
>>> sanxi
[1, 2, 3, 6, 7, 8]
remove()

指定删除元素,也没有返回值!

>>> sanxi.remove(8)
>>> sanxi
[1, 2, 3, 6, 7]
1.4.7、列表循环

其实就是for循环啦

1.4.8、统计元素出现次数count
>>> sanxi.append('sanxi666')
>>> sanxi.append('sanxi666')
>>> sanxi
[1, 2, 3, 6, 7, 'sanxi666', 'sanxi666']
>>> sanxi.count('sanxi666')
2
1.4.9、查找元素的索引号index
>>> sanxi
[1, 2, 3, 6, 7, 'sanxi666', 'sanxi666']
>>> sanxi.index('sanxi666')
5
#跟字符串一样,列表的index也是从左到右开始查找,当查找到第一个符合条件的元素时,停止查找,后面还有无相同元素也不管!
>>> sanxi.index('233')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: '233' is not in list
#还是一样,查不到就直接报错!至于为什么没有find,你去问作者!
1.4.10、清理列表元素clear

这里使用clear,注意,清空的是列表中元素,而不是直接删除整个列表!

>>> sanxi.clear()
>>> sanxi
[]
1.4.11、倒转列表中元素reverse
>>> haha=[1,'hi','GKD']
>>> haha.reverse()
>>> haha
['GKD', 'hi', 1]
1.4.12、列表元素大小排序sort

在排序纯数字时,sort是根据值来排序,从小到大叫升序,sort(reverse=True)则设置为降序

>>> sanxi=[666,33,233]
>>> sanxi.sort()
>>> sanxi
[33, 233, 666]
>>> sanxi.sort(reverse=True)
>>> sanxi
[666, 233, 33]

sort只能对同类型数据排序,如果是纯字母则是按照asci表先后顺序来排,靠后的为大;且字符串排序比大小按照对应位置字符依次比较,当第一个比较结果有互有大小时,后面的就不再进行比较

>>> sanxi=['baga','aba','baca']
>>> sanxi.sort()
>>> sanxi
['aba', 'baca', 'baga']

2、元祖:tuple

元祖就是不可变的列表,即只读列表!

2.1、作用:

按照索引存放多个值,只用于读,不改;这样有利于节省内存空间!

2.2、定义:

中括号()内用逗号分隔开多个任意类型的元素,没有逗号时不算元祖;当元祖内部有可变类型时,可以改可变类型里面的元素。

>>> sanxi=(666,777,'haha')
>>> type(sanxi)
<class 'tuple'>

2.3、类型转换

tuple(),将括号里面的任意类型元素转换为元祖

>>> xixi=[6,9,23]
>>> type(xixi)
<class 'list'>
>>> xi2=tuple(xixi)
>>> type(xi2)
<class 'tuple'>

2.4、内置方法

与列表几乎一样

3、字典:dict

3.1、作用

突破位置顺序限制,与列表形成互补

3.2、定义:

{}内用逗号分隔开多个key:value,其中value可以是任意类型,但是key必须是不可边类型

>>> sanxi={'name':'sanxi','age':233}
>>> type(sanxi)
<class 'dict'>

3.3、数据转换类型:

3.3.1、将列表转换成字典类型

前提是列表中每一个元素拥有两个值;如下所示:

>>> sanxi=[['name','sanxi'],['age',233]]
>>> dict(sanxi)
{'name': 'sanxi', 'age': 233}
3.3.2、快速初始化字典
keys为空时

dict.fromkeys(keys),当keys后面为空时,默认值为None

>>> sanxi=('name','age','address')
>>> dict.fromkeys(sanxi)
{'name': None, 'age': None, 'address': None}
指定value时
>>> dict.fromkeys(sanxi,233)
{'name': 233, 'age': 233, 'address': 233}

3.4、内置方法

3.4.1、按key存取值
key存在,

则修改key所对应的值;

>>> sanxi={'name':'sanxi','age':233}
>>> sanxi['name']=666
>>> sanxi
{'name': 666, 'age': 233}
key不存在时

若key不存在,则创建并赋值!

>>> sanxi['address']='China'
>>> sanxi
>>> {'name': 666, 'age': 233, 'address': 'China'}
3.4.2、统计个数len

统计key个数;

>>> sanxi
{'name': 666, 'age': 233, 'address': 'China'}
>>> len(sanxi)
3

当存在多个相同的key时,字典默认仅保存最后一个

>>> haha={5:6,4:8,5:90,4:80}
>>> haha
>>> {5: 90, 4: 80}
>>> len(haha)
>>> 2
3.4.3、成员运算

in,not in,以key为判断根据

{'name': 666, 'age': 233, 'address': 'China'}
>>> 666 in sanxi
False
>>> 'name' in sanxi
True
>>> 233 not in sanxi
True
>>> 'age' not in sanxi
False
3.4.4、删除
del
>>> haha
{5: 90, 4: 80}
>>> del(haha)
.pop(keys)

根据key删除元素,返回被pop删除的key所对应的值

>>> sanxi
{'name': 666, 'age': 233, 'address': 'China'}
>>> sanxi.pop('name')
666
>>> sanxi
{'age': 233, 'address': 'China'}
.popitem()

随机删除元素,返回被其删除的key和value,返回的值为元祖类型

>>> sanxi
{'name': 666, 'age': 233, 'address': 'China'}
>>> sanxi.popitem()
('address', 'China')
3.4.5、了解知识点
keys(),打印所有key
>>> sanxi
{'name': 666, 'age': 233}
>>> sanxi.keys()
dict_keys(['name', 'age'])
values(),打印所有值
>>> sanxi.values()
dict_values([666, 233])
items(),显示所有元素
>>> sanxi.items()
dict_items([('name', 666), ('age', 233)])

python2.7直接输出所有值,3.X

世间微尘里 独爱茶酒中