列表&字典&集合内置方法

列表数据类型内置方法

作用

描述多个值,比如爱好等

定义方式

hobby_list = ['sing', 'dance', 'rap', 'basketball']

lt = list('cxk')

print(lt)	#结果为['c', 'x', 'k']

内置方法

索引取值(以下必须掌握)

列表可进行索引修改,索引类似于字符串,第一个值为0,往后依次推类。也可以从最后一个值-1开始往前依次推类

索引修改则要找到对应的值之后再进行修改

hobby_list = ['sing', 'dance', 'rap', 'basketball']

print(1, hobby_list[-1])
hobby_list[-1] = '233'  # 索引修改
print(2, hobby_list[-1])

结果为:

1 basketball
2 233

切片

列表的切片也类似于字符串,这里就不多bb了,直接贴上代码就能看懂了

(注意,每次在运行代码时要重新赋值,因为每次调用内置函数都会改变列表本身)

print(hobby_list[:])  
print(hobby_list[::-1])		#-1位反序  
print(hobby_list[0:3:2])

结果为:

['sing', 'dance', 'rap', 'basketball']
['basketball', 'rap', 'dance', 'sing']
['sing', 'rap']

长度

可以得出该列表一共有几个值

print(len(hobby_list))

in/not in

和字符串一样,正确返回true,错误返回false

print('sing' in hobby_list)  # True
print('play' in hobby_list)  # False

for循环

可以遍历列表得出其中的值

for hobby in hobby_list:
    print(hobby)

结果为:

sing
dance
rap
basketball

del删除

顾名思义,根据索引值删除值

del hobby_list[-1]
print(hobby_list)

结果为“

['sing', 'dance', 'rap']

append追加

可在列表的最后追加一个值

hobby_list.append('我吐辣')
print(hobby_list)

结果为:

['sing', 'dance', 'rap', 'basketball', '我吐辣']

count计数(以下需要掌握)

count可以对列表内的某个元素计数

hobby_list = ['sing', 'dance', 'rap', 'basketball', '233', '233']
print(hobby_list.count('233')) # 结果为:2

extend扩展列表

和append区别:append追加一个值,extend扩展一个列表

hobby_list.extend([1, 2, 3, 4])  
print(hobby_list)

结果为:

['sing', 'dance', 'rap', 'basketball', 1, 2, 3, 4]

clear清除

将整个列表清除

hobby_list.clear()  # 清除
print(hobby_list)	# 结果为:[]

copy复制

可以保存改动之前的列表

hobby_list2 = hobby_list.copy()  # 复制列表

hobby_list[-1] = '233'
print(hobby_list)		# ['sing', 'dance', 'rap', '233']
print(hobby_list2)		# ['sing', 'dance', 'rap', 'basketball']

在某些特定的情况用处很大,比如每次去掉列表中最后一个值的时候,如果不用copy是这样的:

lis = [1, 2, 3, 4, 5] 
#
# lis2 = lis.copy()
for i in lis:  
    lis.pop()
    print(lis)

看上去好像没有什么问题吧,可是 你运行代码就会发现,结果和你想象的不同

[1, 2, 3, 4]
[1, 2, 3]
[1, 2]

怎么会这样呢,因为列表和字符串不同,列表是可变的,每次你删除一个值,列表的值的数量就会少1,当i的值还没达到要求,就已经大于列表值的数量,也就是循环结束的最大值了。所以,才会出现这种情况。但是如果加上copy就不回了:

lis = [1, 2, 3, 4, 5]  # [1,2]
for i in lis.copy():  # [1,2,3,4,5]  # [1,2,3,4]  # [1,2,3]  # i = 3
    lis.pop()
    print(lis)

结果为:

1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
[]

pop/remove删除

pop默认删最后一个

remove则可以指定想要删除的值

hobby_list.pop()  
print(hobby_list)
hobby_list.remove('sing')  
print(hobby_list)

结果为:

['sing', 'dance', 'rap']

['dance', 'rap', 'basketball']

index

索引,输入值可知道对应的索引,如果没有则会报错

print(hobby_list.index('dance'))
print(hobby_list.index('dance', 0, 2))  # 索引0-2内有没有该值

结果为:1

​ 1

insert插入

插入需要输入对应的索引,随后列表内原本索引会全部往后退一格

hobby_list.insert(0, '1')  # 插入
print(hobby_list)

结果为:['1', 'sing', 'dance', 'rap', 'basketball']

reverse反转

可以将列表里的值反过来

hobby_list.reverse()  # 反转
print(hobby_list)

结果为:['basketball', 'rap', 'dance', 'sing']

sort排序

排序的列表中只能单独存在字符串和数字,否则无法比较

lis = [2, 1, 4, 3, 5]
lis.sort()
print(lis)

结果为:[1, 2, 3, 4, 5]

存在一个值还是多个值

多个值

有序or无序

有序

可变or不可变

可变

元组

定义方式

列表中的括号改为小括号

元组类似于列表,但是元组无法被修改,元组在定义的那一刻他的元素个数以及元素的值全部固定了

lis = [1,2,3,4]
tup = (1,2,3,4)
print(tup[1]) # 2
lis[1] = 5
print(lis)	# [1,3,3,4]
tup[1] = 5
print(tup)	# 报错

毫无用处,早期元组一般用于减小内存占用,以后只要定义列表就行了

存在一个值还是多个值

多个值

有序or无序

有序

可变or不可变

压根没有这一说法

字典

作用

对于值添加描述信息使用它

定义方式

用{ }以逗号隔开加入键值对key:value

info_dict = {'name' : 'cxk', 'gender' : 'none' , 'hobby_list' : ['sing', 'dance', 'rap', 'basketball']}

内置方法

以下一些和字符串及列表重复的内置方法我就直接跳过了,看看代码就好了

取值方式(以下必须掌握)

按键取值,即可取也可变(以下必须掌握)

print(info_dict['hobby_list'])
info_dict['age'] = 20
print(info_dict)

结果为:

['sing', 'dance', 'rap', 'basketball']

长度

print(len(info_dict))	# 3

in or not in

print('name' in info_dict)	# True

for循环

只能取键,取值的方法下面会讲到

for i in info_dict:
    print(i)

结果为:

name
gender
hobby_list

keys/values/items

可以取出相应的值

print(list(info_dict.keys()))  # list
print(list(info_dict.values()))  # list
print(list(info_dict.items()))  # list
print(info_dict.items())

结果为:

['name', 'gender', 'hobby_list']
['cxk', 'none', ['sing', 'dance', 'rap', 'basketball']]
[('name', 'cxk'), ('gender', 'none'), ('hobby_list', ['sing', 'dance', 'rap', 'basketball'])]

dict_items([('name', 'cxk'), ('gender', 'none'), ('hobby_list', ['sing', 'dance', 'rap', 'basketball'])])

配合for循环可以取键,取值,或者俩个都取

for i in info_dict.values():
    print(i)

结果为:

cxk
none
['sing', 'dance', 'rap', 'basketball']

其中items用的最多,一般和解压缩一起用

for i in info_dict.items():
    print(i)

for k, v in info_dict.items():
    print(k, v)

结果为:

('name', 'cxk')
('gender', 'none')
('hobby_list', ['sing', 'dance', 'rap', 'basketball'])
name cxk
gender none
hobby_list ['sing', 'dance', 'rap', 'basketball']

copy(以下需要掌握)

可以复制整个字典,类似于列表

pop/popitem

pop删除指定key值的键值对

popitem 早期的时候字典是无序的,是随机删除的,但是由于Python3优化了字典,让字典看起来貌似有序了

info_dict.pop('name')
print(info_dict)

info_dict.popitem()  
print(info_dict)

结果为:(因为是可变的,所以最后一行的输出是在上次的基础上运行的)

{'gender': 'none', 'hobby_list': ['sing', 'dance', 'rap', 'basketball']}

clear

清除该字典

info_dict.clear()
print(info_dict)	# {}

get

如果有则返回字典中的值,没有返回none(默认),或者自己想要的值,不会报错

print(info_dict.get('age'))
# print(info_dict['name'])
print(info_dict.get('name', 'nick'))  # 如果有,就返回真正的值;如果没有,默认返回None,也可以指定返回

结果为:

None
cxk

setdefault

往里面追加的值,如果key已存在,则不变

info_dict.setdefault('age', 123123)

结果为:{'name': 'cxk', 'gender': 'none', 'hobby_list': ['sing', 'dance', 'rap', 'basketball'], 'age': 123123}

update更新

如果已有key则更改所对应的值,如果没有则增加一个值

info_dict.update({'age':123})
print(info_dict)
info_dict.update({'name':1})
print(info_dict)

结果为:

{'name': 'cxk', 'gender': 'none', 'hobby_list': ['sing', 'dance', 'rap', 'basketball'], 'age': 123}

fromkeys

由dict.出来,快速造一个字典

print(dict.fromkeys(['a',2,3,4,5],'hyc'))

结果为:{'a': 'hyc', 2: 'hyc', 3: 'hyc', 4: 'hyc', 5: 'hyc'}

看上去好像很牛逼,实际上卵用没有

存在一个值还是多个值

多个值

有序or无序

无序

可变or不可变

可变

集合

基本用不到,Redis

作用

就是存储一大堆元素的东西,容器数据类型

定义方式

以{}用逗号隔开不可变数据类型

s = {1, 2, 1, 'a', 'a', 'c'}

去重(用的到)可将列表中相同的元素去除

lis = [1,2,3,1,3]
print(set(lis))
print(list(set(lis)))

结果为:

{1, 2, 3}

[1, 2, 3]

乱序

顾名思义,集合中的元素顺序是乱的,即每次运行顺序都不同

注意,{}表示的是字典,不是集合,定义空集合必须用set()

内置方法

可将俩个集合实现并集,交集,差集,交叉补集

pythoners = {'jason', 'nick', 'tank', 'sean'}
linuxers = {'nick', 'egon', 'kevin'}  # 定义俩个集合

print(pythoners | linuxers)  # 并集
print(pythoners.union(linuxers))

print(pythoners & linuxers)  # 交集
print(pythoners.intersection(linuxers))

print(pythoners - linuxers)  # 差集
print(pythoners.difference(linuxers))

print(pythoners ^ linuxers) # 交叉补集
print(pythoners.symmetric_difference(linuxers))

结果为:

{'tank', 'sean', 'nick', 'jason', 'kevin', 'egon'}
{'tank', 'sean', 'nick', 'jason', 'kevin', 'egon'}
{'nick'}
{'nick'}
{'jason', 'tank', 'sean'}
{'jason', 'tank', 'sean'}
{'tank', 'sean', 'jason', 'egon', 'kevin'}

add增加

s = {1,2,3}
s.add(4)
print(s)	# {1, 2, 3, 4}

pop随即删除

使用s.pop(会随机删除一个元素

clear

清空该集合

copy复制

复制该集合

remove/discard

remove没有则报错,而discard没有不报错

存在一个值还是多个值

多个值

有序or无序

无序

可变or不可变

可变

虽然这一次看上去很多,但总体来说只要熟练运用各种内置方法,相信今天的内容也可以快速掌握了

posted @ 2019-08-05 16:34  黑井白子  阅读(300)  评论(0编辑  收藏  举报
Live2D