类型存一个值还是多个值,多个值的称为容器类型
前面有讲到列表和字典的基础知识,这次来做一次知识拓展!
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