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()

基本的列表操作

  1. 修改数据:给元素赋值

    >>> l1 = [1, 2]
    >>> l1[1] = 3
    >>> l1
    [1,3]
    
    # 尝试给超出索引范围的位置赋值试试
    >>> l1[2] = 2
    IndexError: list assignment index out of range
    

    注: 应该是调用l1[2]时直接报错了

  2. 删除元素

>>> l1 = [1, 2]
>>> del l1[1]
>>> l1
[2]
  1. 切片赋值
>>> 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()方法,在替换

列表方法

  1. append

    >>> name = ['bob', 'jim', 'tom']
    >>> name.append('bury')
    >>> name
    ['bob', 'jim', 'tom', 'bury']
    
  2. clear

    效果就像他的含义一样,清空整个列表

  3. extend

  4. copy

  5. count

  6. pop

    按照索引删除,有返回值.

  7. remove

    按照元素删除,没有返回值.

  8. insert

    在指定位置插入元素,相当于插队

  9. index

  10. reverse

  11. sort

    默认按照元素的ascii值升序排序. 但是只有列表中的所有数据同一类型的数据才可以排序,否则会报错.

  12. 高级排序

    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']
    
    
posted @ 2020-08-11 10:30  紫楼kd  阅读(35)  评论(0)    收藏  举报