Python 序列和元祖

Python 序列和元祖

序列

序列(可以理解为容器)是一种数据结构,其中的元素带编号(从 0 开始)。列表、字符串和元组都属于序列,其中列表是可变的,元组和字符串是不可变

要访问序列的一部分,可使用切片操作:提供两个指定切片起始和结束位置的索引。要修改列表,可给其元素赋值,也可使用赋值语句给切片赋值

通用的序列操作

索引(indexing)

序列中的所有元素都有编号,从 0 开始递增,可以通过编号(索引)来获取元素。当使用负数索引时,Python 将从右(从最后一个元素)开始往左数

# 以字符串为例
foo = 'bar'

foo[0] == 'b'
foo[-1] == 'r'
切片(slicing)

索引用来访问单个元素,切片用来访问特定范围内的元素,使用两个索引,用冒号分隔。第一个索引包含第一个元素的编号,第二个索引是切片后余下的第一个元素的编号。简言之,第一个索引指定的元素包含在切片内,第二个索引指定的元素不包海在切片内

简写

省略第一个索引,表示 0
省略第二个索引,表示序列长度
同时省略两个索引,表示复制该序列

# 以字符串为例
hello = 'codelesser'
hello[:4] == 'code'
hello[4:8] == 'less'
hello[:] ==  'codelesser'

步长

切片可以是指定步长,当然步长也可以为负数

# 以字符串为例
hello = 'codelesser'
hello[::2] == 'cdlse
hello[::-2] == 'rseeo'
相加

可以运用加法来拼接序列。但是不能拼接不同类型的序列

# 以字符串为例
foo = 'code'
bar = 'lesser'

foo + bar == 'codelesser'
乘法

将序列与数相乘时,将重复这个序列 x 来创建一个新序列

# 以字符串为例
foo = 'code'
foo * 3 == 'codecodecode'
成员资格

用运算符in来检查特定的值是否包含在序列中。满足返回 True,反之 False

# 以字符串为例
foo = 'codelesser'
('code' in foo) == True

迭代(iteration)

对序列迭代意味着对其每个元素都执行特定的操作

# 以字符串为例
for x in 'codelesser':
    print(x)

列表

列表是可变的,可以修改其内容

list 函数

某些情况下使用字符串来创建列表很有用,可以使用 list 函数

somelist = list('Hello') 
# print(a)
# 输出 ['H', 'e', 'l', 'l', 'o']

’’.join(somelist) 将列表转换为字符串

somelist = ['H', 'e', 'l', 'l', 'o']
s = ''.join(somelist) 
# print(s)
# 输出 'Hello'

基本操作

  • 修改列表:给元素赋值
foo = ['code', 'lesser']
foo[1] = 'more'
print(foo)
# 输出 ['code', 'more']
  • 删除元素
del somelist[x]

foo = ['code', 'lesser']
del foo[1]
print(foo)
# 输出 foo = ['code'']
  • 给切片赋值

通过切片赋值,可将切片替换为长度与其不同的序列
使用切片赋值,可以不替换原有元素的情况下插入新元素
通过替换为一个空切片来达到删除该切片的目的

列表方法

  • append: 就地将一个对象附加到列表末尾

  • clear:就地清空列表内容

  • copy:复制列表

  • count:计算指定的元素在列表中出现的次数

  • extend:就地同时将多个值附加到列表末尾,可以将这些值组成的序列作为参数提供给方法 extend

  • index:在列表中查找指定值第一次出现的索引

  • insert:将一个对象插入列表

  • pop:从列表中删除一个元素,并返回这一元素

可以通过 pop 和 insert 或 append 能够模拟 Stack。使用模块 collections 中的 deque 是更佳的解决方案

  • remove:就地删除第一个为指定值的元素

  • reverse:按相反的的顺序排列列表中的元素

  • sort:就地对列表进行排序

  • sorted:返回排序后的新列表

高级排序

sort 和 sorted 方法接收两个参数:key 和 reverse。默认 key 为字典序

foo = ['code', 'lesser']

foo.sort()
foo.sorted(reverse=True)
# 使用 key 为列表项的长度来进行排序
foo.sort(key=lambda x: len(x))
foo.sort(key=lambda x: len(x), reverse=True)

sorted(foo)
sorted(foo, reverse=True)
# 使用 key 为列表项的长度来进行排序
sorted(foo, key=lambda x: len(x))
sorted(foo, key=lambda x: len(x), reverse=True)

元组

元组是不可修改的,就是不可变的,元组的切片也是元组

元祖的使用和列表相同,这里就不再赘述了

创建单个值的元组,后面得加上逗号

t = 47,
print(t)
# 输出 (47,)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GettingReal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值