2.1序列概述
列表和元组的主要不同在于,列表是可以修改的,而元组不可以。这意味着列表适用于需 要中途添加元素的情形,而元组适用于出于某种考虑需要禁止修改序列的情形。
Python支持一种数据结构的基本概念,名为容器(container)。容器基本上就 是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字 典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名称(也叫键)。
2.2通用序列操作
有几种操作适用于所有序列,包括索引、切片、相加、相乘和成员资格检查。另外, Python还提供了一些内置函数,可用于确定序列的长度以及找出序列中最大和最小的元素。
2.2.1索引
序列中的所有元素都有编号——从0开始递增。可以通过此来访问各个元组。
字符串就是由字符组成的序列。索引0指向第一个元素,这里为字母H。不同 于其他一些语言,Python没有专门用于表示字符的类型,因此一个字符就是只包含一 个元素的字符串。
当你使用负数索引时,Python将从右(即从最后一个元素)开始往左数,因此-1是最后一个 元素的位置。
如果函数调用返回一个序列,可直接对其执行索引操作。例如,如果你只想获取用户输入 的年份的第4位,可像下面这样做:
从上面就可以看出,可以直接对用户输入的进行索引操作。
实战:输入年月日,并打印
months=['January','February','March','April','May','June','July','August','September','October','November','December']
endings=['st','nd','rd']+17*['th']+['st','nd','rd']+7*['th']+["st"] #这属于英文命名规则,可以baidu下原则
year=input('Year:')
month=input('Month(1-12):')
day=input("Day(1-31):")
#year=int(year)
month_number=int(month)
day_number=int(day)
month_name=months[month_number-1]
ordinal=day+endings[day_number-1]
print(month_name+' '+ordinal+','+year)
2.2.2切片
除使用索引来访问单个元素外,还可使用切片(slicing)来访问特定范围内的元素。为 此,可使用两个索引,并用冒号分隔:
你提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内。
-1表示最后一个数,但是索引使用-1选不到最后一位。如果使用索引0,即到达列表末尾后再前进 一步所处的位置。
事实上,执行切片操作时,如果第一个索引指定的元素位于第二个索引指定的元素后面(在这里,倒数第3个元素位于第1个元素后面),结果就为空序列。好在你能使用一种简写:如果切片结束于序列末尾,可省略第二个索引。
使用上述的方法,就可以访问到最后一位数了
同样,如果切片开始于序列开头,可省略第一个索引
实战:提取域名
执行切片操作时,显式或隐式地指定起点和终点,但是我们未设置步长信息,在普通切片中,步长为1。这意味着从一个元素移到下一个元素,因此切片包含 起点和终点之间的所有元素。
上述设置的步长就是1,步长为2时,将从起点和终点之间每隔一个元素 提取一个元素。如下
结合上述切片方法,每隔3个元素取一个点。如下
当然,步长不能为0,否则无法向前移动,但可以为负数,即从右向左提取元素。
但是设置步长为负数,需要非常小心。步长为负数时,第一个索引必须比第二个索引大。
2.2.3序列相加
用 + 来拼接
不能拼接列表和字符串,虽然它们都是序列。一般而言,不能拼接不同 类型的序列。
2.2.4乘法
将序列与数x相乘时,将重复这个序列x次来创建一个新序列。
当然可以使用这样的方式创建包含指定元素的空列表。
2.2.5成员资格
要检查特定的值是否包含在序列中,可使用运算符in。这个运算符与前面讨论的运算符 (如乘法或加法运算符)稍有不同。它检查是否满足指定的条件,并返回相应的值:满足 时返回True,不满足时返回False。
内置函数len、min和max很有用,其中函数len返回序列包含的元素个数,而min和max分 别返回序列中最小和最大的元素。
在这两个表达式中,调用max和min时指定的实参并不是序列,而直接将数作为实参。