【Python基础】Python序列类型的基础知识

内置的序列类型分类

这里介绍两种分类方法,

容器序列与扁平序列

容器序列:能存放不同类型的数据/ 存放对象的引用

  • list
  • tuple
  • collections.deque
  • dict (书中没说,但是个人觉得应该也算)

扁平序列:只能存放相同类型的数据 / 存值

  • str
  • bytes
  • bytearray
  • array.array
  • memoryview

另一种分类方法

可变序列与不可变序列

可变序列:比如list可以放很多值,但是id(list) 不变

  • list
  • dict
  • bytearray
  • array.array
  • collections.deque
  • memoryview

不可变序列:比如字符串拼接之后会返回一个新的字符串对象

  • str
  • bytes
  • tuple

列表推导和生成器表达式

列表推导式,一次性返回整个表达式生成的列表,即所有的结果

[x for x in range(4)]  # [0,1,2,3]

[x for x in 'ABC']  # ['A', 'B', 'C']

生成器表达式,一次只返回所有结果中的一个,当结果数量级很大时,比如长度为1000000000的list,用生成器表达式,一次返回一个,节省内存

for x in (x for x in range(4)):
	print(x)

元组和命名元组

普通元组

>>> t1=(1,2)
>>> t1
(1, 2)

命名元组

>>> from collections import namedtuple
>>> cord = namedtuple('cord','x y')
>>> cord # 构造了一个类cord
<class '__main__.cord'>
>>> type(cord)
<class 'type'>
>>> c1 = cord(1,2)
>>> c1
cord(x=1, y=2) # 打印的时候是带标签的
>>> isinstance(c1,tuple)
True # 是元组的一个子类

序列的切片

有命名的切片,避免硬编码

x = 'hello world new new day'
# x = [x for x in range(4)]
head_tow = slice(0, 2)
print(x[head_tow])

序列的 + 和 *

一般来说,python内置序列当使用了+和*后都会返回一个新的对象,下面是例子

>>> x=[1,2]
>>> y=[3,4]
>>> x+y
[1, 2, 3, 4] # 有返回说明这是一个新的对象
>>> x*2
[1, 2, 1, 2]
>>> y*2
[3, 4, 3, 4]
>>> x
[1, 2]  # 实际上 x没有变化
>>> y
[3, 4]
>>> 

然后是内置序列的+= 和*= ,这类似与原地操作

>>> x
[1, 2]
>>> y
[3, 4]
>>> x+=y # 无输出,表明没有返回新对象
>>> x
[1, 2, 3, 4]

>>> y
[3, 4]
>>> y*=2
>>> y
[3, 4, 3, 4] # 同理
>>> 

序列的排序和插入

原地排序,新返回一个对象的排序

>>> x = [1,3,2] 
>>> x.sort() # 原地排序,没有返回新的list
>>> x
[1, 2, 3]
>>> x = [1,3,2]
>>> sorted(x) #  非原地排序,返回了新的list
[1, 2, 3]
>>> x
[1, 3, 2]

bisect 二分查找和插入的使用,需要保证序列已经有序

import bisect
if __name__ == '__main__':
    L = [1, 3, 3, 6, 8, 12, 15]
    x = 3
    x_insert_point = bisect.bisect_left(L, x)  # 在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1
    print(x_insert_point)

    x_insert_point = bisect.bisect_right(L, x)  # 在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回右侧位置3
    print(x_insert_point)

    x_insort_left = bisect.insort_left(L, x)  # 将x插入到列表L中,x存在时插入在左侧
    print(L)

    x_insort_rigth = bisect.insort_right(L, x)  # 将x插入到列表L中,x存在时插入在右侧    
    print(L)

######## result
1
3
[1, 3, 3, 3, 6, 8, 12, 15]
[1, 3, 3, 3, 3, 6, 8, 12, 15]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值