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 阅读(573) 评论(0) 编辑 收藏 举报