Python 序列

一、列表、元组、字典、集合如何区别?(可变与不可变、可重复与不可重复)

1、列表

    列表是 Python 中的内置可变序列,将所有元素放在一对方括号中。

    当列表增加或删除元素时,列表对象自动进行内存的扩展和收缩,从而保证元素之间没有缝隙。

    同一个列表中的元素的类型可以不相同,可以包含整数、实数、字符串等基本类型和列表、元组、字典、集合以及其他自定义类型的对象。

    使用 del 命令可以删除整个列表,也可以删除列表指定位置上的元素。

2、元组

    元组属于不可变序列,将所有元素放在一对圆括号中。

    元组一旦创建,用任何方法都不可以修改其元素的值,也无法为元组增加或删除元素。

    如果创建只包含一个元素的元组,需要在元素后加一个逗号。

元组和列表的区别:

  • 列表属于可变序列,可以随意地修改列表中的元素值以及增加和删除列表元素;而元组属于不可变序列,元组中的数据一旦定义就不允许通过任何方式修改。
  • tuple() 函数可以看作是在冻结列表并使其不可变,而 list() 函数是在融化元组使其可变。
  • 元组的访问和处理速度比列表快。
  • 元组可以用作字典的键,而列表不能当作字典的键使用。
  • 虽然元组属于不可变序列,其元素的值是不可改变的,但如果元组中包含可变序列,则可以更改其中可变序列的值。

3、字典

    字典是“键 - 值对”的无序可变序列,每个元素的“键”和“值”用冒号分割,相邻元素之间用逗号分隔,所有元素放在一堆大括号中。

    字典中的“键”可以是 Python 中任意不可变数据。“键”不允许重复,“值”可以重复。

    字典的下标是字典的“键”,而列表和元组的下标必须为整数。

4、集合

    集合是无序可变序列,与字典一样使用一对大括号作为界定符,同一个集合的元素之间不允许重复,集合中的每个元素都是唯一的。

    集合支持交集(& 或 intersection())、并集(| 或 union())、差集(difference())等操作。

  • 列表、字符串、元组属于有序序列,支持双向索引,支持负整数作为下标来访问其中元素。
  • 字典和集合属于无序序列,集合不支持使用下标的方式来访问其中的元素,可以使用字典的“键”作为下标来访问字典中的“值”。
  • 列表、字典、集合属于可变序列,元组、字符串属于不可变序列。

二、切片(3个参数写与不写)

    切片适用于列表、元组、字符串、range 对象等类型。

    切片使用 2 个冒号分隔的 3 个数字来完成:第一个数字表示切片开始位置(默认为 0),第二个数字表示切片截止(但不包含)位置(默认为列表长度),第三个数字表示切片的步长(默认为 1),当步长省略时可以顺便省略最后一个冒号。

    切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

    使用切片操作不会影响列表对象内存空间。切片返回的是列表元素的浅复制,与列表对象的直接赋值不一样。

三、range() 函数的用法、参数及其含义

    range([start,] stop[, step])

    start:表示起始值,默认为 0;stop:表示终止值(结果中不包括这个值);step:表示步长(默认为 1)。

    返回一个 range 可迭代对象。

四、排序

1、列表对象自身提供的 sort() 方法进行原地排序:

    该方法会修改原来的列表,不会返回新的列表。

    函数原型:list.sort(key=None, reverse=False)

                      key 接受的是一个只有一个形参的函数,接受的函数返回值,表示此元素的权值,sort 将按照权值大小进行排序。

                      reverse 接受的是一个 bool 类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是 False(升序)。

2、内置函数 sorted()

    该函数返回新列表,不会对源列表进行任何修改。

    函数原型:sorted(iterable, key=None, reverse=False)

                      iterable,返回值是一个对 iterable 中元素进行排序后的列表。

                      reverse是一个 bool 类型的值,表示是否颠倒排列顺序,一般默认的是 False(升序)。

                      key 接受的是一个只有一个形参的函数,这个函数用于从每个元素中提取一个用于比较的关键字,默认为None。

五、* 与 ** 操作符的结果

1、在列表中的 * :

    将列表与整数相乘,用于扩展列表对象,生成一个新列表,新列表时原列表的重复。使用 * 运算符将包含列表的列表进行重复并创建列表时,并不创建元素的复制,而是创建已有对象的引用,所以当修改其中一个值时,相应的引用也会被修改。

2、调用函数时的 * 和 ** :

序列解包:在一条赋值语句中将多个值的序列解开,然后放入到变量序列中。也就是将对应位置上的变量与值对应,然后一一赋值。

                  序列解包允许函数返回有一个以上的值并打包成元组,然后通过一条赋值语句进行访问。需要注意的是:捷豹序列中的元素数量必须和放置在“=”左边的数量完全一致,否则 Python 会在赋值时引发异常。

                  序列解包可用于:对多个变量同时赋值;列表;字典,默认是对字典“键”操作,如果需要对“键值对”进行操作使用 items() 方法说明,如果需要对“值”进行操作使用 values() 方法明确指定;函数调用。

    在函数调用时,在实参前面加上一个 * 也可以进行序列解包,从而实现将序列中的元素值依次传递给相同数量的形参。

>>> demo(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
1 2 3 4
>>> {'x': 1, **{'y': 2}}
{'x': 1, 'y': 2}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值