Python-列表和元祖

首先,大家如果看到有什么不懂的地方,欢迎吐槽!!!
我会在当天或者第二天及时回复,并且改进~~


在Python中,最基本的数据结构是序列,
序列包含:

  • 列表
  • 元祖

其他的内建序列类型有:

  • 字符串
  • Unicode字符串
  • buffer对象
  • xrange对象

一、通用序列操作
所有的序列类型都可以进行某些特定的操作。这些操作包括:索引、分片、加、乘及检查某个元素是否属于序列的成员。

1.1 索引

>>> name = 'hongxue'
>>> name[0]
'h'
>>> name[0:3]
'hon'
这就是索引,字符串是一个由字符组成的序列。索引0指向第1个元素,在当前例子中就是h
可以通过索引获取元素

>>> str = raw_input('Year: ')[3]
Year:2015
>>> str
'5'

1.2 分片
索引是访问单个元素,分片与索引类似,但是它来访问的是一定范围内的元素,分片通过冒号隔开的两个索引实现:

分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是要提取的第1个元素的编号,而最后的索引则是分片之后剩余部分的第1元素的编号。

(1) 优雅的捷径
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[0:3]
[1,2,3]
>>> numbers[3:8]
[4,5,6,7,8]
>>> numbers[2:7]
[3,4,5,6,7]
numbers[-3:-1]
[8,9]
numbers[-3:]
[8,9,10]
numbers[:3]
[1,2,3]
numbers[:]
[1,2,3,4,5,6,7,8,9,10]

分片示例:
>>> name = raw_input('Please input your name:')[0:4]
Please input your name:hongxue
>>> print name
'hong'

(2) 更大的步长
进行分片的时候,分片的开始和结束点需要进行指定(不管是直接还是间接)。而另外一个参数–步长通常都是隐式设定的。默认为1,则可以手动进行设置

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

当然,步长可以是负数,此时分片从右到左提取
>>> numbers[8:3:-1]
[9,8,7,6,5]
>>> numbers[10:0:-2]
['10,8,6,4,2']
>>> numbers[::-2]
[10,8,6,4,2]
>>> numbers[5::-2]
[6,4,2]
>>> numbers[:5:-2]
[10,8]

对于一个正数步长,Python会从序列的头部开始向右提取元素,直到最后一个元素,
对于一个负数步长,Python会从序列的尾部开始向左提取元素,直到第一个元素。

1.3 序列相加
通过使用加运算符可以进行序列的连接操作:

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

>>> x = ['hong']
>>> y = ['xue']
>>> x + y
['hong','xue']

当然,列表和字符串是无法连接在一起的,尽管它们都是序列。
两种类型相同的序列才能进行连接操作,例如:
>>> x = '123'
>>> y = ['4,5,6']
>>> x + y

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'list' objects

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

>>> 'Python' * 5
'PythonPythonPythonPythonPython'
>>> [30] * 10
'30,30,30,30,30,30,30,30,30,30'

None、空列表和初始化
空列表可以简单的通过两个中括号进行表示,里面什么也没有。但是,如果想创建一个占用十个元素空间,却不包括任何有用内容的列表,可以想前面那样,[42] * 10,这样会更加实际一些。然而,有时候可能会需要一个值来代表空值—意味着里面没有任何东西,这个时候就需要用到None,None是Python的内键值,它的确切含义是”这里什么也没有”。

创建占用十个元素的空间
>>> [] * 10
[]

创建一个空值
>>> Value = [None] * 10
>>> Value
[None,None,None,None,None,None,None,None,None,None]
代码清单   序列(字符串)乘法表示

sentence = raw_input('Sentence: ')

screen_width = 80
text_width = len(setence)
box_width = text_width + 6
left_margin = (screen_width - box_width) / 2

print 
print ' ' * 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) + '+'
print

1.5 成员资格
为了检查一个值是否在序列中,可以使用in运算符,这个运算符检查某个条件是否为真,然后返回相应的值,也叫做’布尔值’

条件为真返回True
条件为假返回False
>>> permissions='rw'
>>> 'r' in permissions   
>>> 'w' in permissions
>>> 'x' in permissions

#检查用户是否在name列表中
>>> name = ['hongxue','xiaomao','yixiao']
>>> 'hongxue' in name
>>> 'xiaomao' in name
#检查用户名和PIN码
>>> database = [['hongxue','123'],['yixiao','456'],['xiaomao','789']]
>>> username = raw_input('User name: ')
>>> pin = raw_input('PIN code: ')
>>> if [username,pin] in database : print 'Access granted'

1.6 长度、最小值和最大值
内建函数len、min和max非常有用

len函数返回序列中所包含元素的数量
min函数返回序列中最小的元素
max函数返回序列中最大的元素

numbers = [456,214,999]
>>> len(numbers)      #返回元素个数
3
>>> min(numbers)      #返回最小元素
214
>>> max(numbers)      #返回最大元素
999