前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 序列通用操作介绍

Python 序列通用操作介绍

作者头像
Tencent JCoder
发布2022-05-06 09:55:27
5900
发布2022-05-06 09:55:27
举报
文章被收录于专栏:我的技术专栏

序列概览

Python包含6种内置的序列:列表、元组、字符串 、Unicode字符串、buffer对象、xrange对象。在序列中的每个元素都有自己的编号。列表与元组的区别在于,列表是可以修改,而组元不可修改。理论上几乎所有情况下元组都可以用列表来代替。有个例外是但元组作为字典的键时,在这种情况下,因为键不可修改,所以就不能使用列表。

我们先来编写一个列表:

使用方括号括起来,列表元素使用逗号进行分隔:

代码语言:javascript
复制
>>> a = ["hello",100]
>>> a
['hello', 100]
>>> 

序列是可以嵌套的:

代码语言:javascript
复制
>>> A =["xiaoming",98]
>>> B =["xiaohong",87]
>>> grade=[A,B]
>>> grade
[['xiaoming', 98], ['xiaohong', 87]]
>>> 

下面来介绍一下通用的序列操作。

通用序列操作

所有序列都可以进行如下操作:

  • 索引
  • 分片
  • 检查某个元素是否属于序列成员(成员资格)

并且python提供了一些序列内置函数:

  • 计算序列长度
  • 找出做大元素及做小元素

另外序列操作还有迭代,这个以后介绍。 下面就这些操作做一个介绍

索引

序列的索引

索引即标号,及元素在序列中的编号。这些编号从0开始递增,0表示第一个元素:

代码语言:javascript
复制
>>> world = "Hello Word"
>>> world[0]
'H'
>>> world[3] #第四个元素
'l'
>>> 

用法就如C语言的数组一样。在python中比较神奇的是,索引可以是负数:使用负数时,Python会从右边向左边计数,最后一个元素的索引值为-1,为啥不是-0呢?因为会和第一个元素重合:

代码语言:javascript
复制
>>> world = "Hello Word"
>>> world[0]
'H'
>>> world[3]
'l'
>>> world[-1]#从右边开始计数
'd'
>>> world[-2]
'r'
>>> 

字符串字面值的索引

字符串字面值可以直接使用索引,不需要定义一个变量来引用这个字符串字面值,这和C语言不一样:

代码语言:javascript
复制
>>> "Hello Word"[1]
'e'
>>> 

在函数返回值使用索引

有一些函数的返回值为字符串,有的返回其他的序列,我们可以在函数调用之后使用[]来对返回序列的元素值进行索引。

代码语言:javascript
复制
>>> input("input something:")[1]
input something:Hello word
'e'
>>> 

示例小程序

在这个例子中我们使用序列来存储12个月份的单词字符串与每月天数的数字后缀。程序的目的是输入年月日后进行序列索引查找对应的单词并输出结果:

代码语言:javascript
复制
>>> 
Year:2015
Month:9
Day:4
4th September 2015
>>> 

程序清单1

代码语言:javascript
复制
months =[
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'Octber',
    'November',
    'December',
    ]
endings=['st','nd','rd']+17*['th']\
         +['st','nd','rd']+7*['th']\
         +['st']

year = input('Year:')
month = input('Month:')
day = input('Day:')
print(day+endings[int(day)-1]+' '+months[int(month)-1]+' ' +year)

注意点:

  • 在序列前乘以一个数字x,表示重复序列元素x次并存入序列中:
代码语言:javascript
复制
>>> a = 5*['a','b']
>>> a
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
>>> 

分片

分片即提取一个范围内的序列,语法是:

序列名(或字符串字面值)[a:b] 提取索引a~b范围内的子序列。

代码语言:javascript
复制
>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> number[1:5]
[2, 3, 4, 5]
>>> 

注意点:

  • 范围采用左闭右开,即第一个索引元素包含在分片内,第二个则不包含在分片内。就像C++容器采取的迭代器策略一样。
  • 右索引超出范围时,分片直接取到序列最后一个元素:
代码语言:javascript
复制
>>> number[0:19]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 
  • 左索引比右索引的元素在序列中出现得晚时,分片为空序列:
代码语言:javascript
复制
>>> number[-3:1]
[]
>>> 
  • 忽略右索引,分片将直接取到最后一个索引:
代码语言:javascript
复制
>>> number[0:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 
  • 同样的,忽略左索引时:
代码语言:javascript
复制
>>> number[:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 
  • 自然的,同时忽略两个索引,整个序列都成为分片了:
代码语言:javascript
复制
>>> number[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 

分片的步长

分片的步长指的是,在分片索引标记的范围内,多长的距离取样一个值构成分配。在上面展示的代码中,步长都是为1的,也即范围内所有元素都被取样。我们可以设置分片步长:

number[a🅱️L] L即步长

代码语言:javascript
复制
>>> number[0:10:2]
[1, 3, 5, 7, 9]
>>> 

注意:

  • 步长不能为0
  • 步长可以为负数,表示从右向左提取元素。

序列相加

序列相加就简单了。不罗嗦了。

代码语言:javascript
复制
>>> num1=[1,2,3,4,5]
>>> num2=[6,7,8,9,10]
>>> num3=num1+num2
>>> num3
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 

序列相乘

序列相乘其实在上面说过了,用数字x乘以一个序列会产生新的序列,在新的序列中,原来的序列将被重复x次。

代码语言:javascript
复制
>>> 'Python'*5
'PythonPythonPythonPythonPython'
>>> 
代码语言:javascript
复制
>>> world=["hello "]
>>> world2=5*world
>>> world
['hello ']
>>> world2
['hello ', 'hello ', 'hello ', 'hello ', 'hello ']
>>> 

使用None创建有长度的空序列

None是Python的内置值。它的确切含义是“什么也没有”,我们如果要初始化一个长度为10的列表,而不在列表中放实际内容,就可以使用Node:

代码语言:javascript
复制
>>> sequence = 10*[None]
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
>>> 

成员资格

成员资格指某值是否在序列中,使用in运算符,运算符结果为布尔值True 或者 False,语法如下:

'某值' in 序列

代码语言:javascript
复制
>>> number=[1,2,3,4,5,6,7,8,9,10]
>>> 1 in number
True
>>> 11 in number
False
>>> 

序列长度、最小值和最大值

分别对应三个内置函数:

  • len()
  • min()
  • max()

简单易用,这里看一看就明白了:

代码语言:javascript
复制
>>> number = [1,2,3,4,5,6,7,8,9,10]
>>> len(number)
10
>>> min(number)
1
>>> max(number)
10
>>> 

对于字符串值组成的序列,值大小的比较实用字符串的比较规则:

代码语言:javascript
复制
>>> months =[
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'Octber',
    'November',
    'December',
    ]
>>> len(months)
12
>>> min(months)
'April'
>>> max(months)
'September'
>>> 

具体序列类型如元组、列表等的介绍,在下一篇文章中进行。

多谢看完文章,如所记有差错恳请指出。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 序列概览
  • 通用序列操作
    • 索引
      • 序列的索引
      • 字符串字面值的索引
      • 在函数返回值使用索引
      • 示例小程序
    • 分片
      • 分片的步长
    • 序列相加
      • 序列相乘
        • 使用None创建有长度的空序列
          • 成员资格
            • 序列长度、最小值和最大值
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档