step3被寄予厚望要详细讲,其实也没有多详细。
元组、列表、字典是最简单的数据结构。
元组可以看做是不可变的列表,在赋值及字符串模板中特别好用。
some_tuple = (6,'7')
a,b = some_tuple
print(a)
print(b)
# 6
# 7
print('digit %d str %s' % some_tuple)
# digit 6 str 7
这里的字符串拼接分三个部分:
'digit %d str %s'
- 带%d
%s
的字符串模板%
- 一个百分号some_tuple
- 参数元组,即(6,'7')
在字符串模板中,%d
代表一个整数,%s
代表一个字符串,这种符号的数量和顺序是和参数元组中的元素一一对应的。
列表一般用来存放同类型数据,存放不同类型的推荐使用字典。
some_list = ['y','e','s','.']
some_list = [1,6,8,9]
# 像这种情况
some_list = [1,'ok',[],{},False]
# 如果是有序的参数,我们尽量使用tuple
some_tuple = (1,'ok',[],{},False)
# 如果是类似属性这样的,我们尽量使用dict
some_dict = {
'num':1,
'msg':'ok',
'some_list':[],
'some_dict':{},
'freezed':False
}
字符串可以看做是完全由字符组成的列表。
some_str = 'yes,it is.'
some_list = ['y','e','s',',','i','t',' ','i','s','.']
print(len(some_str),len(some_list))
# 10 10
可以通过变量名[索引]
的方式读取它们的元素,索引就是它的位置序号,从0
开始递增。
some_tuple = (6,'e')
some_str = 'yes.'
some_list = ['y','e','s','.']
print(some_tuple[1],some_str[1],some_list[1])
# e e e
元组、字符串、列表都不可以通过索引在新的位置直接写入。但是其中的列表可以通过索引对已有位置的元素进行修改。
其他操作都需要通过函数进行转化来实现。比如字符串对象的replace()
方法,列表对象的append()
方法等,之后会接触到。
some_list = ['y','e','s']
some_list[0] = 'Y'
print(some_list)
# ['Y','e','s']
集合可以看做是不具有重复元素的列表(长得不像,不能通过索引访问),或者只有key
的字典(只是长得像,也不能通过key访问)。
some_list = ['y','e','s',',','i','t',' ','i','s','.']
# 函数set(list)返回一个集合
some_set = set(some_list)
print(some_set)
# {'e', 'y', '.', 's', 't', ' ', 'i', ','}
# 重复的i和s只剩一个了。具有确定性、互异性、无序性。
注意因为确定性的关系,像list这样可变的类型,不可以放入set中。
集合元素的增减也需要通过函数实现,比如集合对象的add()
和remove()
方法。但现在我们主要介绍它的数学功能。
s1 = {1,2,3}
s2 = {2,3,4}
print(s1 & s2)
# {2, 3}
print(s1 | s2)
# {1, 2, 3, 4}
正如上面推荐使用dict
所展示的那样。字典由{}
和键值对定义。
some_dict = {
'num':1,
'msg':'ok',
'some_list':[],
'some_dict':{},
'freezed':False
}
在其他语言当中它也被称为map,因为它不需要像list一样按照顺序查找。而是像看地图一样根据某个方位直接找到。这是通过key
来实现的。所以它具有极快的查找速度。
some_msg = some_dict['msg']
print(some_msg)
# ok
some_dict['some_key'] = 'lalala'
print(some_dict)
# {'num': 1, 'msg': 'ok', 'some_list': [], 'some_dict': {}, 'freezed': False, 'some_key': 'lalala'}