python基本数据结构-序列部分
python的最基本的数据结构-序列
数据结构的定义
数据结构是以某种方式(如通过编号)组合起来的数据元素(如数,字符乃至其他数据结构)集合.在python中,最基本的数据结构为序列(sqequence)序列中的每个元素都有编号,即其位置及索引,其中第一个元素的索引为0,第二个元素的索引为1, 以此类推.
在python中的序列有:
- 列表
- 元祖
- 字符串
通用的序列操作
在python中所有序列通用的操作有:
- 索引
- 切片
- 相加
- 相乘
- 成员资格检查
- 另外,python还提供了一些内置函数,可用于确定序列的长度以及找出序列中最大的元素和最小元素.
索引
序列的索引从0开始,第一个元素的索引为0,第二个为1,以此类推.也支持负索引,从最后一个元素的索引为-1开始, 倒数第二个为-2,以此类推.
>>> greeting = 'Hello'
>>> greeting[1]
'e'
>>> greeting[-1]
'o'
小练习: 输入年,月(数1-12), 日(数1-31),再使用相应的月份月份名等把日期打印出来.
month = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'Novembr',
'December',
]
切片
通过切片可以访问特定范围的元素.
注意: 如果指定了结束具体索引位置时,切片的特定范围指的是一个左闭右开区间.
>>> l1 = [1, 2, 3]
>>> l1[0:2]
[1,2]
切片也有简单的写法比如不写起始索引或结束索引,这时就会取到低.
>>> l1 = [1, 2, 3, 4]
>>> l1[:2]
[1, 2]
>>> l1[2:]
[3,4]
>>> l1[:]
[1, 2, 3, 4]
切片也可以按照步长跳跃取值
>>> l1 = [1, 2, 3, 4]
>>> l1[::2]
[1, 3]
注意: 当索引超出范围时,会抛出IndexError
序列相加
>>> ['a','b'] + ['c', 'a']
['a', 'b', 'c', 'a']
序列乘法
>>> ['a'] * 3
['a', 'a', 'a']
>>> 'a' * 3
'aaa'
成员资格
要检查特定的值是否在序列中可使用运算符in.根据检查结果返回bool值
>>> 'a' in 'bad'
True
>>> 'a' in 'bd'
False
>>> 'a' in ['b', 'a', 'd']
True
长度,最小值和最大值
内置函数len,max, min很有用,其中len返回序列包含的元素个数.对所有序列都一样.但是, 当序列为列表和元素,max和min返回序列的最大值和最小值. 其实下面的代码可以看出,返回的其实是每个元素对应的ascii码最小或者最大对应的那个元素.
>>> min(['a','95','a'])
'95'
>>> ord('a')
97
列表
函数list()
基本的列表操作
-
修改数据:给元素赋值
>>> l1 = [1, 2] >>> l1[1] = 3 >>> l1 [1,3] # 尝试给超出索引范围的位置赋值试试 >>> l1[2] = 2 IndexError: list assignment index out of range注: 应该是调用l1[2]时直接报错了
-
删除元素
>>> l1 = [1, 2]
>>> del l1[1]
>>> l1
[2]
- 切片赋值
>>> name = list('bobds')
>>> name[2:] = list('tom')
>>> name
['b', 'o', 't', 'p']
>>> name[1:3] = []
>>> name
['b', 'p']
>>> l2 = [1, 2, 0, 1, 2, 3, 4, 5]
>>> l2[2:] = 'bob'
>>> l2
[1, 2, 'b', 'o', 'b']
>>> l2[2:] = (1, 2, 3)
>>> l2
[1, 2, 1, 2, 3]
思考 与其说是赋值,感觉替换更加合适.对于元祖,字符串等可迭代的对象,应该是先经过了list()方法,在替换
列表方法
-
append
>>> name = ['bob', 'jim', 'tom'] >>> name.append('bury') >>> name ['bob', 'jim', 'tom', 'bury'] -
clear
效果就像他的含义一样,清空整个列表
-
extend
-
copy
-
count
-
pop
按照索引删除,有返回值.
-
remove
按照元素删除,没有返回值.
-
insert
在指定位置插入元素,相当于插队
-
index
-
reverse
-
sort
默认按照元素的ascii值升序排序. 但是只有列表中的所有数据同一类型的数据才可以排序,否则会报错.
-
高级排序
sort接受两个可选的关键字参数:key和reverse
元组
元组和列表相比,列表是可变的,元组是不可变的.因此,列表所有涉及到修改值,删除值,改变排序的操作或方法,在元组中是没有的.但是涉及到查看的操作和方法元组和列表是一样的.比如, count等
字符串
Python中凡是用引号引起来的数据可以称为字符串类型,组成字符串的每个元素称之为字符,将这些字符一个一个连接起来,然后在用引号起来就是字符串。
字符串的基本操作
所有标准的序列操作(索引,切片,乘法,成员资格审查,长度,最小值和最大值)都适合都适合字符串,但由于字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的.
字符串的格式化输出
-
转换说明符:如%s,%d等
常用的字符串格式设置中的类型说明符
类型 含义 b 将整数表示为二进制数 d 将整数视为十进制处理 e 使用科学计数法来表示小数 f 将小数表示为定点数 s 保持字符串的格式不变 % 将数表示为百分比值 -
format: pythn3.0引入 -
f '': python3.6引入
字符串方法
-
center通过在字符串两边填充字符(默认为空格)让字符串居中.
>>> 'hello, world'.center(50, '*') '*******************hello, world*******************' -
find在字符串中查找子串.如果找到,就返回子串的第一个字符的索引,否则返回-1
>>> 'hello, Tim'.find('Tim') 7 >>> 'hello, Tim'.find('Tina') -1 -
join合并序列的元素,并且返回合并的结果
>>> l1 = ['hello,', 'world'] >>> '|'.join(l1) 'hello,|world' -
lower字符串全部变小写
>>> s1 = 'hello'.upper() >>> s1 'HELLO' >>> s1.lower() 'hello' -
replace将指定子串都替换为另一个字符串,并返回替换后的结果
>>> s1 = 'hello'.replace('l', '*') >>> s1 'he**o' -
split输入参数,根据指定参数,将字符串分割为一个列表
>>> l1 = 'hello, world'.split() >>> l1 ['hello,', 'world'] -
strip去掉字符串前后的空格
-
translate -
判断字符串是否满足特定的条件
'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper'判断的内容就是翻译后的意思
-
方法汇总:
>>> dir('') ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

浙公网安备 33010602011771号