Python基础编程(第2版)(第二章)

无论什么缘由,第一章和第二章间隔有点长,坚持
python

第二章 列表和元组web


2.1 序列概念数据库

本章重点讨论最经常使用的两种类型:列表和元组(列表和元组主要区别是,列表能够修改,元组则不能。)dom

列表的各个元素经过逗号分隔,写在方括号中(以下:)函数

>>> list = ['test1','test2']

列表也能够包含其余列表,举例构建一我的员信息的列表也是能够的,这个列表就是你的数据库:(以下)url

>>> a = ['lizi',29]

>>> b = ['taozi',20]

>>> c = [a,b]

>>> c
[['lizi', 29], ['taozi', 20]]

2.2 通用序列操做
code

全部序列类型均可以进行某些特定操做。这些操做包含:索引(indexing)、分片、加、乘以及检查某个元素是否属于序列成员。初次以外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。索引

2.2.1 索引ip

序列中全部元素都是有编号的----从0开始递增。
utf-8

>>> name = gengjikun
>>> name[0]
>>> 'g'
>>> name[-1]
>>> 'n'

注意:字符串就是一个由字符组成的序列。索引0指向第1个元素。


这就是索引。能够经过索引获取元素。全部序列都是能够经过这种方式进行索引。使用负数索引时,Python会从右边,也就是从最后一个元素开始计数。最后1个元素的位置编号为-1(不是-0,由于那会和第1个元素重合)

字符串字面值可以直接使用索引,不须要一个变量引用他们。两种作法的效果是同样的。

>>> 'Hello'[1]
>>> 'e'

还能够这样:

>>> fourth = raw_input("Year:")[3]
Year:2016

>>> fourth
'6'

2.2.2 分片

与使用索引来访问单个元素相似,可使用分片操做来访问必定范围内的元素。分片经过冒号相隔的两个索引来实现:

>>> tag = '<a href="http://www.python.org">Python web site</a>'

>>> tag
'<a href="http://www.python.org">Python web site</a>'

>>> tag[8:31]
'"http://www.python.org"'

>>> tag[9:30]
'http://www.python.org'

>>> tag[32:-4]
'Python web site'

分片操做的实现须要提供两个索引做为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。

>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[0:1]
[1]

假设须要访问最后3个元素,那么固然能够进行显式的操做:

>>> numbers[7:10]
[8, 9, 10]

索引10指向的是第11个元素——这个元素并不存在,倒是在最后一个元素以后。

以下作法是可行的,但若是须要从别表结尾开始计数呢

>>> numbers[-3:-1]
[8, 9]
>>> numbers[-1:-3]
[]
>>> numbers[-3:0]
[]

这并非咱们所要的结果。实际上,只要分片中最左边的索引比它右边的晚出如今序列中,若是分片所获得的部分包括序列结尾的元素,那么,只需置空最后一个索引便可:

>>> numbers[-3:]
[8, 9, 10]

这样的方法一样适用于序列开始的元素:

>>> numbers[:3]
[1, 2, 3]

实际上,若是须要复制整个序列,能够将两个索引置空:

>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

分片实例:

#coding:utf-8
#对http://www.something.com形式的URL进行分割

url = raw_input('Please enter the URL:')
domain = url[11:-4]

print "Domain name:f" + domain

Running script: "E:\pylist\list.py"
Please enter the URL:http://www.python.org
Domain name:python

2. 更大的步长

分片的时候,分片的开始和结束须要指定。而另一个参数是步长——一般都是隐式设置的。在普通的分片中,步长是1——分片操做就是按照这个步长  逐个遍历序列的元素,而后返回开始和结束点之间的全部元素。

>>> numbers = [1,2,3,4,5,6,7,8,9,10]

>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[0:10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

步长为2的分片包括的是从开始到结束每一个1个的元素。

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]

>>> numbers[::4]
[1, 5, 9]

以前说起的捷径也可使用。若是须要将每4个元素的第1个提取出来,那么只要将步长设置为4便可(以上)

固然步长不能为0——那不会执行——但步长能够是负数,即从右到左提取元素:

>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]

>>> numbers[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> numbers[::-2]
[10, 8, 6, 4, 2]

>>> numbers[::-4]
[10, 6, 2]

2.2.3 序列相加

经过使用加号就能够进行序列的链接操做:

>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]

>>> 'Hello,' + 'world!'
'Hello,world!'

>>> [1,2,3] + 'world!'
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

以上正如错误信息所提示的,列表和字符串是没法链接在一块儿的,尽管他们都是序列。简单地说,两种相同类型的序列才能进行链接操做。

2.2.4 乘法

用数字x乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重置x次。

>>> 'Python' * 5
'PythonPythonPythonPythonPython'

>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

None、空列表和初始化

None是Python的内建值

[]空列表

初始化一个长度为10的列表:

>>> sequence = [None] * 10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]

2.2.5 成员资格

为了检查一个值是否在序列中,可使用in运算符。

>>> permissions = 'rw'

>>> 'w' in permissions
True

>>> 'x' in permissions
False

>>> users = ['mlh','foo','bar']

>>> raw_input('Enter your user name:') in users
Enter your user name:mlh
True

>>> subject = '$$$ Get rich now!!! $$$'

>>> '$$$' in subject
True


2.2.6  长度、最小值和最大值

内建函数len、min和max很是有用。len函数返回序列中所包含元素的数量,min函数和max函数分别返回序列中最大和最小的元素。

>>> numbers = [100,34,678]

>>> numbers
[100, 34, 678]

>>> len(numbers)
3

>>> max(numbers)
678

>>> min(numbers)
34

>>> max(2,3)
3

>>> min(9,3,2,5)
2

根据以上咱们能够很容易理解例子中各个操做 是如何实现的,除了最后两个表达式可能会让人有些迷惑。在这里,max函数和min函数的参数不是一个序列,而是以多个数字直接做为参数。

2.3 列表:Python的'苦力'

列表是可变的——能够改变列表的内容

2.3.1 list函数

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

注意:list函数适用于全部类型的序列,而不仅是字符串。

2.3.2 基本的列表操做

改变列表方法:元素赋值、元素删除、分片赋值以及列表方法(不是全部的列表方法都真正地改变列表)。

一、改变列表:元素赋值

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

>>> x[1] = 2

>>> x
[1, 2, 1]

二、删除元素

从列表删除元素使用del语句

>>> names = [1,2,3,4,5,6]
>>> del names[0]
>>> names
[2, 3, 4, 5, 6]

三、分片赋值

分片是一个很是强大的特性,分片赋值操做则更加显现它的强大。

>>> name = list('jikun')

>>> name
['j', 'i', 'k', 'u', 'n']

>>> name[2:]
['k', 'u', 'n']

>>> name[2:] = list('car')

>>> name
['j', 'i', 'c', 'a', 'r']

可使用与原序列不等长的序列将分片替换:

>>> name = list('jikun')

>>> name[1:]
['i', 'k', 'u', 'n']

>>> name[1:] = list('ar')

>>> name
['j', 'a', 'r']

>>> name[1:] = list('ikunshishen')

>>> name
['j', 'i', 'k', 'u', 'n', 's', 'h', 'i', 's', 'h', 'e', 'n']

分片赋值语句能够在不须要替换任何原有元素状况下插入新的元素:

>>> numbers = [1,5]

>>> numbers[1:2]
[5]

>>> numbers[1:1]
[]

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

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

还能够经过分片赋值来删除元素:

相关文章
相关标签/搜索