<div id="top"/>
[TOC]
# 列表 (List)
* 是Python中最基本的数据结构,也是最常用的数据类型。
* 都可以进行的操作包括索引,切片,加,乘,检查成员。
* 有两类常用操作:索引(index) 和 切片(slice)
## 访问、添加、修改、删除元素
元素访问、添加、修改、删除 都是索引(index)操作
~~~ python
>>> l = [365, 'everyday', 0.618, True]
>>> print l[0] # 输出 [365, 'everyday', 0.618, True]
# 访问元素
>>> print l[0] # 输出 365
# 添加元素
l.append(1024)
>>> print l # 输出 [365, 'everyday', 0.618, True, 1024]
# 修改元素
l[0] = 123
>>> print l # 输出 [123, 'everyday', 0.618, True, 1024]
# 删除元素
del l[0]
>>> print l # 输出 ['everyday', 0.618, True, 1024]
~~~
## 切片
* print l[startIndex : endIndex]
➣ 开始位置包含在切片中,而结束位置不包括
➣ 输出index = startIndex 到 index = endIndex - 1 范围的值
* print l[ : endIndex]
➣ 不指定startIndex,切片就从第一个元素开始
* print l[startIndex : ]
➣ 不指定endIndex,切片一直到最后一个结束元素
* print l[ : ]
➣ 都不指定,则返回整个列表
~~~ python
l = [365, 'everyday', 0.618, True]
# 输出list中的最后一个元素
>>> print l[-1] # 输出 True
# 输出list中倒数第三个元素
>>> print l[-3] # 输出 everyday
# 输出 index = 1 到 index = 3-1 的元素
>>> print l[1:3] # 输出 ['everyday', 0.618]
# 输出 index = 0 到 index = 3-1 的元素
>>> print l[:3] # 输出 [365, 'everyday', 0.618]
# 输出 index = 1 到 列表最后一个元素
>>> print l[1:] # 输出 [ 'everyday', 0.618, True]
# 输出列表所有元素
>>> print l[:] # 输出 [365, 'everyday', 0.618, True]
~~~
## 步长
* 步长可以使正数或负数,但不能是0
* 步长是负数时
➣ 开始点索引必须大于结束点索引 numbers[8:3:-2] 8 (开始索引) > 3(结束点索引)
➣ 从序列尾部向左提取元素,知道第一个元素
* 步长是正数时,则从序列的头部开始向右提取元素
~~~ python
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> print numbers[:5:1] # [1,2,3,4,5] 步长设置为1 (默认就是1)
>>> print numbers[:5:2] # [1,3,5]
>>> print numbers[8:3:-2] # [9,7,5]
~~~
## 切片赋值
~~~ python
>>> name = list('shihongji')
>>> print name # 输出 ['s', 'h', 'i', 'h', 'o', 'n', 'g', 'j', 'i']
# 例: 给列表 name 中给第 7(包含第七个元素)个元素后面的元素赋值
>>> name[7:] = list('hong')
>>> print name # 输出 ['s', 'h', 'i', 'h', 'o', 'n', 'g', 'h', 'o', 'n', 'g']
# 例: 给第 1 个元素和第 2 个元素赋值
>>> numbers = [1, 2, 4, 5]
>>> numbers[1:3] = 3
>>> print numbers # 输出 [1, 3, 5]
# 例:
>>> numbers = [3,1,4,5,8,10]
>>> print numbers[:3:2] # 输出 [3,4]
>>> numbers[:3:2] = [9] * 2 # 实际就是把[3,4] 替换赋值 [9] * 2 步数是几就乘几
>>> print numbers # 输出 [9, 1, 9, 5, 8, 10]
~~~
## 列表相加
~~~ python
>>> print [1,2,3] + [4,5,6] # 输出 [1, 2, 3, 4, 5, 6]
~~~
## 乘法
* 这是一个很神奇的地方
~~~ python
# 等同于 'Python' + 'Python' + 'Python' + 'Python' + 'Python'
>>> print 'Python' * 5 # 输出 PythonPythonPythonPythonPython
# 利用了列表相加 等同于 [10] + [10] + [10] + [10] + [10]
>>> print [10] * 5 # 输出 [10, 10, 10, 10, 10]
~~~
## in 运算符
* 检查一个值是否在列表中
* 存在返回True 不存在返回False
~~~ python
>>> name = '侍洪洪'
>>> print '洪' in name # 输出 True
>>> print '洪吉' in name # 输出 False
>>> names = ['侍洪洪', '侍不是傻', '侍洪吉']
>>> print '侍洪洪' in names # 输出 True
>>> print '洪吉' in names # 输出 False
>>> database = [
['honghong', '123'],
['hongji', '1234'],
['shihongji', '000000']
]
>>> name = raw_input('输入用户名:')
>>> pin = raw_input('PIN码:')
>>> if [name,pin] in database:
>>> print 'User Acc granted'
~~~
## 列表函数(len、min、max、list)
~~~ python
>>> nl = [10,4,7,2,3,0]
>>> sl = ['shihongji', 'shihonghong', 'shixiaohong']
# len() 返回列表长度
>>> print len(nl) # 输出 6
>>> print len(sl) # 输出 3
# min() 返回列表中最小元素
>>> print min(nl) # 输出 0
>>> print min(sl) # 输出 shihonghong
# max() 返回列表中最大元素
>>> print max(nl) # 输出 10
>>> print max(sl) # 输出 shixiaohong
~~~
* max 和 min 参数并不是一个序列,是以多个数值直接作为参数
~~~ python
>>> print min(1,5,2,1) # 输出 1
>>> print max(1,5,2,3) # 输出 5
~~~
* list() 把字符串强制转换成字符数组
~~~ python
>>> print list('shi') # 输出 ['s','h','i']
~~~
## list1.extend(list2) 和 list1 + list2
* extend() 在列表末尾一次性追加另一个序列中的多个值
➣ list1.extend(list2) extend 函数修改了被扩展的 list1 列表
~~~ python
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list1.extend(list2) # 把b列表元素追加到a列表后
>>> print list1 # 输出 [1, 2, 3, 4, 5, 6]
~~~
* list1 + list2 会生成一个新的列表 list3
~~~ python
>>> list1 = [9,8,7]
>>> list2 = [4,5,6]
>>> list3 = list1 + list2
>>> print list1 # 输出 [9, 8, 7]
>>> print list2 # 输出 [4, 5, 6]
>>> print list3 # 输出 [9, 8, 7, 4, 5, 6]
~~~
## 列表方法(index、insert、pop、remove、reverse、sort)
* index(元素值) 返回元素在列表中的索引
* insert(要插入的索引位置, 元素值)向列表中插入元素
* pop() 移出列表元素(默认移出最后一个),并返回该元素的值
* pop(0) 移出列表第0个元素
* remove() 移出列表中的某个值
* reverse() 将列表中的数据反向存放
➣ [1,2,3] reverse() 后 变成 [3,2,1]
~~~ python
l = [1,2,3,'shi', 'hong', 'ji']
# list.index(obj) 返回元素在列表中的索引
>>> index = l.index('shi')
>>> print index # 3
# list.insert(index, obj) 向列表中插入元素
>>> l.insert(0, 'honghong')
>>> print l # 输出 ['honghong', 1, 2, 3, 'shi', 'hong', 'ji']
# pop() 移除列表元素(默认移出最后一个),并返回该元素的值
>>> l.pop()
>>> print l # 输出 ['honghong', 1, 2, 3, 'shi', 'hong']
# pop(0) 移除列表第0个元素
>>> l.pop(0)
>>> print l # 输出 [1, 2, 3, 'shi', 'hong']
# remove() 移除列表中的某个值
>>> l.remove('hong')
>>> print l # 输出 [1, 2, 3, 'shi']
# reverse() 将列表中的数据反向存放
>>> l.reverse()
>>> print l # 输出 ['shi', 3, 2, 1]
~~~
* list.sort() 和 sorted(list) 排序(默认升序排序):
➣ sort() 对原列表排序,会改变原列表
➣ sorted() 排序后会生成新的列表,原列表不变
~~~ python
>>> list1 = [2,3,5,'shi', 'hong', 'ji']
>>> list2 = [2,3,5,'shi', 'hong', 'ji']
>>> list1.sort()
>>> print list1 # 输出 [2, 3, 5, 'hong', 'ji', 'shi']
>>> list3 = sorted(list2)
>>> print list2 # 输出 [2, 3, 5, 'shi', 'hong', 'ji']
>>> print list3 # 输出 [2, 3, 5, 'hong', 'ji', 'shi']
~~~
## 清空列表
* l[:] = [] 使用切片赋值的方式,把列表置空(清空当前引用的内存数据)
* del l[:] (清空当前引用的内存数据)
* l = [] (重新创建一个新的内存空间)
~~~ python
>>> l1 = ['1', '2', 3, 4]
>>> l1[:] = []
>>> print l1 # 输出 []
>>> l2 = ['2', 's', 'f']
>>> del l2[:]
>>> print l2 # 输出 []
~~~
<div style='width:100px;height:100px;position:fixed;right:0px;bottom:0' >
<a href="#top">返回顶部</a>
</div>
