Python数据结构-序列-列表(list)

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['physics', 'chemistry', 1997, 2000]
也可以用列表推导的方式创建列表:
>>> symbols = 'abcdef'
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[97, 98, 99, 100, 101, 102]
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等
 
访问列表中的值
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:
 
#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
以上实例输出结果:
list1[0]: physics list2[1:5]: [2, 3, 4, 5]
 
更新列表
你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示:
 
#!/usr/bin/python
# -*- coding: UTF-8 -*-
list = [] ## 空列表
list.append('Google') ## 使用 append() 添加元素
list.append('Runoob')
print list
 
删除列表元素
可以使用 del 语句来删除列表的元素,如下实例:
 
#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000]
print list1
del list1[2]
print "After deleting value at index 2 : "
print list1
 
以上实例输出结果:
['physics', 'chemistry', 1997, 2000] After deleting value at index 2 : ['physics', 'chemistry', 2000]
 
列表分片赋值
 
多个列表元素赋值:
>>> name=list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[2:]=list('ar')
>>> name
['p', 'e', 'a', 'r']
 
用与原序列不等长的序列将分片替换:
>>> name=list('perl')
>>> name[1:]=list('ython')
>>> name
['p', 'y', 't', 'h', 'o', 'n']
 
在不需要替换任何原有元素的情况下插入新的元素:
>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
 
通过分片赋值来删除元素:
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[1:4]=[]
>>> numbers
[1, 5]
 
Python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代
Python列表截取
Python 的列表截取实例如下:
>>>L = ['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
>>>
Python列表函数&方法
Python包含以下函数:
序号 函数
1 cmp(list1, list2)
比较两个列表的元素
2 len(list)
列表元素个数
3 max(list)
返回列表元素最大值
4 min(list)
返回列表元素最小值
5 list(seq)
将元组转换为列表
Python包含以下方法:
序号 方法
1 list.append(obj)
在列表末尾添加新的对象
2 list.count(obj)
统计某个元素在列表中出现的次数
3 list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj)
将对象插入列表
6 list.pop(obj=list[-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj)
移除列表中某个值的第一个匹配项
8 list.reverse()
反向列表中元素
9 list.sort([func])
对原列表进行排序
 
 
*************************说明**************************
 
1.extend方法和连接操作(+)的区别:
extend扩展原有的列表:
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
连接操作则返回一个全新的列表,原有列表没有变化:
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]
假如进行如下的操作:
a=a+b
那么连接操作的效率比extend低
 
2.用pop方法实现栈(后进先出,LIFO)
append()+pop()
>>> x=[1,2,3]
>>> x.append(x.pop())
>>> x
[1, 2, 3]
 
3.实现先进先出队列(FIFO)
append() + pop(0)
insert(0,...)+pop()
 
4.需要对一个序列进行反向迭代,可以使用reversed函数,该函数返回一个迭代器对象;而且可以用list函数把返回的对象转换成列表
>>> x=[1,2,3]
>>> list(reversed(x))
[3, 2, 1]
 
5.sorted函数:获取已排序的列表副本,不改变原列表
>>> x=[3,2,6,5]
>>> y=sorted(x)
>>> y
[2, 3, 5, 6]
>>> x
[3, 2, 6, 5]
 
6.实现高级排序 ----改变sort函数的参数 cmp key reverse
1)自定义比较函数cmp
如果希望元素可以按照特定的方式进行排序,而不是sort函数的默认方式,可以通过compare(x,y)的形式自定义比较函数;定义好该函数后,就可以提供给sort方法作为参数了。
内建函数cmp提供了比较函数的默认实现方式:
>>> cmp(1,2)
-1
>>> cmp(2,1)
1
>>> cmp(2,2)
0
>>> numbers=[5,2,7,9]
>>> numbers.sort(cmp)
>>> numbers
[2, 5, 7, 9]
 
自定义cmp函数
#!/usr/bin/env python
def compare(x,y):
if x>y:
return -1
elif x<y:
return 1
else:
return 0
numbers=[4,3,9,8]
numbers.sort(compare)
print numbers
=============运行结果=================》
[9, 8, 4, 3]
 
2)可选参数key
参数key和参数cmp类似,必须提供一个在排序过程中使用的函数,该函数并不是直接用来确定对象的大小,而是为每个元素创建一个键,然后所有元素根据键来排序。key是关键字参数。
>>> x=['hi','hello','howareyou','hey']
>>> x.sort()
>>> x
['hello', 'hey', 'hi', 'howareyou']
 
假设需要根据元素的长度来排序,那么可以用len作为键函数
>>> x=['hi','hello','howareyou','hey']
>>> x.sort(key=len)
>>> x
['hi', 'hey', 'hello', 'howareyou']
 
3)改变reverse的布尔值 ,reverse也是关键字参数
>>> x=[6,4,8,2,5]
>>> x.sort(reverse=True)
>>> x
[8, 6, 5, 4, 2]

 

posted on 2018-09-04 16:08  cherryjing0629  阅读(567)  评论(0编辑  收藏  举报

导航