在python中,最基本的数据结构为序列。序列中的每个元素都有编号,即位置或索引。其中第一个元素的索引为0,第二个元素的索引为1,依次类推。从0开始指的是相对于序列开头的偏移量。用负索引表示序列末尾元素的位置。
序列概述
Python三种序列:列表、元祖、字符串。
列表和元祖的不同在于,列表是可以修改的,而元祖不可以。(想想为什么有的内置函数返回元祖的原因。)
在自己编写程序的时候,几乎所有的情况都可使用列表来代替元祖。一种情况例外,将元祖作用作字典键。(字典键是不允许修改的。)
列表用中括号来表示:
>>> lilei = [‘lilei‘, 18]
序列还可以包含其他序列:
>>> lilei = [‘lilei‘, 18] >>> hanmeimei = [‘hanmeimei‘, 13] >>> jom = [‘jom‘, 15] >>> database = [lilei, hanmeimei, jom] >>> database [[‘lilei‘, 18], [‘hanmeimei‘, 13], [‘jom‘, 15]]
PS: Python支持一种数据结构的基本概念,名为容器。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(列表、元素)和映射(如字典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名字(键)。有一种既不是序列也不是映射的容器,它就是集合。
通用的序列操作
有几种操作适用于所有的序列,包括索引、切片、相加、相乘和成员资格检查。另外,Python中还提供了一些内置函数,可用于确定序列的长度以及找出序列中最大和最小的元素。
PS:有一种操作暂时不讨论,迭代。对序列进行迭代意味着对其每个元素都执行特定的操作。
索引
序列中所有的元素都有编号---从0开始递增。你可像下面这样使用编号来访问各个元素:
>>> msg = ‘hello ‘ >>> msg[0] ‘h‘
当使用负数索引的时,Python将从右(即元素的最后一个位置)开始往左数,因此-1是最后一个元素的位置。
>>> msg[-1] ‘ ‘
对于字符串字面量(以及其他的序列字面量),可以直接对其执行索引操作,无需先将其赋给变量。这与先赋给变量再对变量执行索引操作的效果是一样的。
>>> ‘hello‘[1] ‘e‘
如果函数调用返回一个序列,可直接对其执行索引操作。例如,如果你指向获取用户输入的年份的第四位,可像下面这样做:
>>> fourth = input("Year: ")[3] Year: 2018 >>> fourth ‘8‘
切片
除使用索引来访问元素外,还可使用切片来访问范围内的元素。为此,可使用俩个索引,并用冒号分割:
>>> msg = ‘https://www.baidu.com‘ >>> msg[12:17] ‘baidu‘
第一个索引包含的是第一个元素的编号,但第二个索引是切片后余下的第一个元素标号。
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> numbers[3:6] [4, 5, 6] >>> numbers[3:6][1] 5
这貌似就出现一个问题,无法取出来最后一个元素。可以这样:
>>> numbers[7:0]
步长
执行切片操作的时候,可以显示或者隐式的指定起点和终点,如:
>>> msg = ‘god is girl‘ >>> msg[0:] ‘god is girl‘ >>> msg[:8] ‘god is g‘ >>> msg[:] #复制整个序列 ‘god is girl‘
但通常忽略一个参数,即步长。在普通切片中,步长为1(即默认为1).可以显示的指定步长:
>>> msg[0::2] ‘gdi il‘
还可以指定负数步长:
>>> msg[-1:0:-2] ‘li id‘
序列相加
可使用加法运算符来拼接序列:
>>> [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] >>> ‘hello‘ + ‘ ‘ + ‘world!‘ ‘hello world!‘ >>> [1, 2, 3] + ‘hello‘ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list
PS:一般而言,不能拼接不同类型的序列。
相乘
将序列与数x相乘时,将重复这个序列x次来创建一个新序列:
>>> ‘python‘ * 5 ‘pythonpythonpythonpythonpython‘ >>> [1, 2] * 5 [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
空列表:
>>> list = [] >>> list []
包含10个‘什么都没有的值’的列表
>>> list = [None] * 10 >>> list [None, None, None, None, None, None, None, None, None, None]
成员资格
要检查特定的值是否包含在序列中,可使用运算符in:
>>> name = ‘Ubuntu‘ >>> ‘0‘ in name False >>> ‘u‘ in name True >>> list = [‘root‘, ‘ubuntu‘, ‘admin‘] >>> ‘root‘ in list True >>> ‘roo‘ in list False
一般而言,运算符in检查指定对象是否是序列(或其他集合)的成员(即其中的一个元素),但是对于字符串来说,只有它包含的字符才是其成员或元素。
函数list(实则是类)
>>> list(‘hello‘) [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]
可将任何序列作为list的参数。
>>> ‘‘.join([‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]) ‘hello‘
修改列表
修改列表很容易,就如同普通的赋值,不同的是使用索引表示法给特定的元素赋值。
>>> x = [1, 2, 3, 4] >>> x[1] = 1 >>> x [1, 1, 3, 4]
PS:不能给部存在的元素赋值。
>>> x = [1, 2, 3, 4] >>> x[4] = [5] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list assignment index out of range
删除元素
从列表删除元素很容易,只需要使用del语句即可。
>>> list = [‘root‘, ‘ubuntu‘, ‘admin‘] >>> del list[0] >>> list [‘ubuntu‘, ‘admin‘]
给切片赋值
>>> name = list(‘root‘) >>> name [‘r‘, ‘o‘, ‘o‘, ‘t‘] >>> name[2:] = list(‘ubuntu‘) >>> name [‘r‘, ‘o‘, ‘u‘, ‘b‘, ‘u‘, ‘n‘, ‘t‘, ‘u‘] >>> name[2:] = ‘0‘ >>> name [‘r‘, ‘o‘, ‘0‘]
原文地址:https://www.cnblogs.com/kongzhou/p/9011358.html