python中序列(列表list和元组tuple)的用法

数据结构是以某种方式(如通过编号)组合起来的数据元素的集合。再python中最基本的数据结构为序列(sequence)。序列中的元素是有序的,索引从0开始,用负索引表示序列末尾元素的位置。

python中常见的序列有两种:列表和元组。二者主要的不同点在于:列表是可以修改的,元组是不可修改的。因此元组适用于一下两种情况:① 出于某种考虑需要禁止修改序列的情形;② 将元组用作字典的键(不允许修改)。

1 通用的序列操作

   1.1 索引

序列中所有元素都有编号——从0开始递增。

>>> greeting = 'Hello'    
>>> greeting[0]     # 索引0指向第一个元素
'H'
>>> greeting[-1]    # 索引-1指向从后数第一个元素
'o'

注:字符串本质上是由字符组成的序列。

# 将以数指定年、月、日的日期打印出来
months = ['January', 'February', 'March', 'April', 'June','July', 'August', 'September', 'October', 'November', 'December']# 一个列表,其中包含数1-31对应的结尾
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 17 * ['th'] + ['st']year = input('Year:')
month = input('Month(1-12):')
day = input('Day(1-31):')month_number = int(month)
day_number = int(day)# 表示月和日的数字-1才得到正确的索引
month_name = months[month_number - 1]
ordinal = day + endings[day_number - 1]print(month_name + ' ' + ordinal + ',' + year)/'''
运行结果:
Year:2018
Month(1-12):8
Day(1-31):6
September 6th,2018
'''/

   1.2 切片

除了使用索引来访问单个元素外,还可以使用切片(slicing)来访问特定范围内的元素。切片传入参数为两个索引和一个步长值,均用冒号隔开。例如:[m: n: d]则获取的是下标在[m, n-1)的元素从m开始每d个取出一个,不包含下标为n的元素。其中,若m不写则表示从头开始,若n不写则表示到序列结束,若d不写(第二个:也不写)默认步长为1。同样在此处,索引也可以为负值。

url = 'http://www.python.org'
domain1 = url[:]
domain2 = url[: -4]
domain3 = url[11:]
domain4 = url[11: -4]
domain5 = url[11: -4: 2]print('Domain1 name:', domain1)
print('Domain2 name:', domain2)
print('Domain3 name:', domain3)
print('Domain4 name:', domain4)
print('Domain5 name:', domain5)/'''
运行结果:
Domain1 name: http://www.python.org
Domain2 name: http://www.python
Domain3 name: python.org
Domain4 name: python
Domain5 name: pto
'''/

  1.3 序列相加

可以使用加法运算符将两个序列拼接起来,但不能拼接不同类型的序列。

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello,' + 'world!'
'Hello,world!'

   1.4 乘法

将序列与某个数x相乘,则这个序列将重复x次创建出一个新的序列。

>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
sentence = "He's a very naughty boy!"screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width) // 2print(' ' * left_margin + '+'   + '-' * (box_width - 2) +   '+')
print(' ' * left_margin + '|  ' + ' ' *    text_width   + '  |')
print(' ' * left_margin + '|  ' +           sentence    + '  |')
print(' ' * left_margin + '|  ' + ' ' *    text_width   + '  |')
print(' ' * left_margin + '+'   + '-' * (box_width - 2) +   '+')/'''
运行结果:+----------------------------+|                            ||  He's a very naughty boy!  ||                            |+----------------------------+
'''/

   1.5 成员资格

要检查特定的值是否包含在序列中,可使用运算符in,存在时返回True,否则返回False,因此这样的运算符称为布尔运算符。

>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False
>>> users = ['mlh', 'foo', 'bar']
>>> input('Enter your user name:') in users
Enter your user name: mlh
True
>>> subject = '$$$ Get rich now!!! $$$'
>>> '$$$' in subject
True

2. 列表list

   2.1 list函数

将任何序列转为list

>>> list('Hello')
['H', 'e', 'l', 'l', 'o']

   2.2 修改列表:给元素赋值

通过索引表示法给特定位置的元素赋值。

>>> x = [1, 1, 1]
>>> x[1] = 2
>>> x
[1, 2, 1]

   2.3 删除元素

>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']

   2.4 给切片赋值

① 替换成长度于其不同的序列

>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']

② 插入新元素

>>> numbers = [1, 5]
>>> numbers[1:1] = [2, 3, 4]
>>> numbers
[1, 2, 3, 4, 5]

③ 删除元素

>>> numbers = [1, 2, 3, 4, 5]
>>> numbers[1: 4] = []
>>> numbers
[1, 5]

   2.5 append追加

>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

   2.6 clear清除列表

>>> lst = [1, 2, 3]
>>> lst.clear()
>>> lst
[]

   2.7 copy赋值列表

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b[1] = 4
>>> a
[1, 2, 3]
>>> b
[1, 4, 3]

   2.8 count统计指定元素出现次数

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x.count(1)
2
>>> x.count([1, 2])
1

   2.9 extend将多个值追加

# 使用一个列表进行扩展
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]# 返回一个新的序列,效率低
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]

   2.10 index查找指定值第一次出现的索引

>>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']
>>> knights.index('who')
4
>>> knights[4]
'who'

注:若查找不在列表中的值,将会报错

   2.11 insert插入新的元素

>>> numbers = [1, 2, 3, 5, 6, 7]
>>> numbers.insert(2, 'four')
>>> numbers
[1, 2, 3, 'four', 5, 6, 7]

   2.12 pop删除一个元素并返回该元素

>>> x = [1, 2, 3]
>>> x.pop()    # 无参情况下,删除最后一个
3
>>> x
[1, 2]
>>> x.pop(0)
1
>>> x
[2]

用该方法可以实现栈(stack),实现后进先出(LIFO)

   2.13 remove删除第一个为指定值的元素

>>> x = ['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('be')
>>> x
['to', 'or', 'not', 'to', 'be']

注:只能删除列表中存在的元素,若删除一个列表不存在的元素会报错。

   2.14 reverse反序

>>> x = [1, 2, 3]
>>> x.reverse()
>>> x
[3, 2, 1]

   2.15 sort排序

# sort()排序,无返回值
>>> x = [4, 6, 2, 1, 7, 9]
>>> x.sort()    # 正序排序
>>> x
[1, 2, 4, 6, 7, 9]
>>> x.sort(reverse=True)    # 倒序排序
>>> x
[9, 7, 6, 4, 2, 1]# sorted()排序,有返回值
>>> y = sorted(x)    # 正序排序
>>> y
[1, 2, 4, 6, 7, 9]
>>> x
[9, 7, 6, 4, 2, 1]

   2.16 高级排序

用关键字参数按名称指定,key的值为排序的函数值。不会直接使用这个函数来判断一个元素是否大于另一个元素,而是使它来为每一个元素创建一个键,在根据这些键对元素进行排序。下面的例子将根据长度对元素进行排序。

>>> x = ['aardvark', 'abalone', 'acme', 'add', 'aerate']
>>> x.sort(key=len)
>>> x
['add', 'acme', 'aerate', 'abalone', 'aardvark']

3 元组:不可修改的序列

其实元组和列表的性质相同,唯一的差别是不能修改。其语法是用()括起,元素之间用“,”隔开;当只有一个值时,必须在最后加一个“,”。

和列表有list()函数一样,元素有tuple()函数,将其他序列转换为元组。

# 创建元组
>>> 1, 2, 3
(1, 2, 3)
>>> (1, 2, 3)
(1, 2, 3)
# 长度为一的元组
>>> 42
42
>>> 42,
(42, )
>>> (42, )
(42, )
>>> 3 * (40 + 2)
126
>>> 3 * (40 + 2, )
(42, 42, 42)
>>> tuple([1, 2, 3])    # 将列表转为元组
(1, 2, 3)
>>> tuple('abc')        # 将字符串转为元组
('a', 'b', 'c')
>>> x = 1, 2, 3
>>> x[1]                # 根据索引取值
2
>>> x[1:2]              # 切片
(1, 2)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beta版本测试报告

请根据团队项目中软件的需求文档、功能规格说明书和技术规格说明书,写出软件的测试计划、测试过程和测试结果,并回答下述问题。 1. 写出团队项目软件的总体测试计划,记录测试过程,给出测试结果,并说明这些测试怎样对软…

python给多个子图加总标题

在画完所有的子图后,加一句 plt.suptitle(Title)

AI芯片的长征之路:挑战与机遇

来源: 半导体行业观察前言:笔者有幸受邀在六月初北京举行的首届亚洲AI硬件峰会(AI Hardware Summit Asia)上发表了开幕主题演讲,与全世界的AI硬件专家分享了我对行业的一些看法和想法。演讲以英文形式进行,…

排名(水题)

排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 19177 Accepted Submission(s): 7033 Problem Description今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序&#xf…

make_moons函数

生成半环形数据 sklearn.datasets.make_moons(n_samples100, shuffleTrue, noiseNone, random_stateNone) 参数: n_samples : 整数型, 可选,默认为100,产生的样本点的数量shuffle : 布尔型,可选填 (默认为True),是否…

阿里巴巴罗汉堂发布最关乎人类未来的十大问题

来源:中国新闻网中新网杭州6月25日电 (记者 魏晞)25日,阿里巴巴倡议成立的罗汉堂发布最关乎人类未来的十大问题。200多位来自全球的顶尖学者、政界、企业界负责人应邀在杭州“西湖论剑”,闭门研讨十大问题,其中包括6位诺贝尔经济学…

python画图删除上边框和右边框

import seaborn as sns ... sns.despine();#在画完图之后插入这一句

iOS - Masonry自动布局

简介: 相对于官方的NSLayoutConstraints的的过于繁琐和麻烦,Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。 可以到Masonry-Github下载官方源码Demo安装&…

Python中的字典dict

字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键不可修改且不能重复的,所以其可能是数字、字符串或元组,而不可能是list。字典中键-值对被称为项(item),其语法如下&…

Drive.ai轰然倒下:曾估值两亿,吴恩达夫妇站台,苹果将接盘部分可用技术人才...

来源:大数据文摘曾经估值两个亿美元,吴恩达夫妇亲自站台,风极一时的无人车创业公司Drive.ai轰然倒塌。本月20日,总部位于加州山景城的 Drive.ai 公司被证实已经向一家州政府机构递交了通知,表明即将关闭,并…

PyMC3实现贝叶斯神经网络

转自https://blog.csdn.net/jackxu8/article/details/71308390#commentBox 源地址https://docs.pymc.io/notebooks/bayesian_neural_network_advi.html PyMC3中的贝叶斯深网络 生成数据 产生一个简单的线性不可分的二分类问题的模拟数据。 %matplotlib inline import pymc…

Dynamics CRM 开启图表的3D效果展示

CRM中的图表在我们的业务场景中用的很多,用户可以根据自己的实际需求来构建图表查看数据。我们平时看到的图表都是平面的,像下图中的这种,那有没有一种方式可以让展示3D效果看起来更立体呢,答案是可以的。 这里就以上面的图表为例…

OpenCV初体验

OpenCV提供了一些实用工具来读取从视频流到摄像机画面的各种各样的图像格式&#xff0c;这些工具都是HighGUI的一部分。下面几个小例子可以让初学者提前体验一下OpenCV的功能。 1. 打开一张图像并且将其显示在屏幕上 #include "stdafx.h" #include <opencv2/ope…

“CRISPR婴儿”计划疯狂重启 顶级科学家们表示无力阻止

来源&#xff1a; 生物通新的“CRISPR婴儿”计划启动&#xff0c;顶级科学人士感到震惊&#xff0c;却表示他们无力阻止它6月10日&#xff0c;俄罗斯分子生物学家Denis Rebrikov表示计划开展基因编辑婴儿实验&#xff0c;并公开了他将跨越“红线”的研究计划。两位有影响力的学…

写一些脚本的心得总结系列第3篇------同步数据到其他表

3.同步数据到其他表的。 这种又分插入和更新字段两种情况&#xff0c;除了sql方面的逻辑外&#xff0c;要考虑记录执行sql和变化前后数据记录。总是要做最坏的打算&#xff0c;一旦更新错了还能回滚数据。 比如在更新之前先记录被更新的数据记录到某表&#xff08;新建表&#…

PyMC3和Lasagne构建神经网络(ANN)和卷积神经网络(CNN)

转自http://www.sohu.com/a/162460147_505915 源地址https://twiecki.io/blog/2016/07/05/bayesian-deep-learning/ 今天&#xff0c;我们将使用Lasagne构建一个更有趣的模型&#xff0c;这是一个灵活的Theano图书馆&#xff0c;用于构建各种类型的神经网络。你可能知道&…

OpenCV高斯滤波GaussianBlur

图像处理中&#xff0c;常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。 三种滤波器的对比滤波器种类基本原理特点均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值易收到噪声的干扰&#xff0c;不能完全消除噪声&#xff0c;只能相对减弱噪声中值滤波计算模板内…

(附视频) | AI奠基人、美国AI科学家特伦斯谈深度学习​

来源&#xff1a;笑看国际风云特伦斯 谢诺夫斯基&#xff08;Terrence Sejnowski&#xff09;&#xff1a;世界十大人工智能科学家之一&#xff0c;还是美国仅3位在世的‘四院院士’之一&#xff0c;同时兼任全球人工智能顶级会议NIPS基金会主席。1989年&#xff0c;特伦斯加入…

Chapter 3.GDI/DirectDraw Internal Data Structures

说明&#xff0c;在这里决定跳过第二章&#xff0c;实在是因为里面涉及的内容太理论&#xff0c;对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object-oriented programming practice,information hiding is achieved by declaring certain member…

OpenCV图像金字塔

图像金字塔是图像多尺度表达的一种&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通过梯次向下采样获得&#xff0c;直到达到某个终止条件才停止采…