python基础教程_学习笔记3:列表
2014-05-14 18:57
1286 查看
列表
list函数
字符串不能像列表一样被修改,所以有时候根据字符串创建列表会很有用。list函数可以实现:
>>> list('signjing')
['s', 'i', 'g', 'n', 'j', 'i', 'n', 'g']
>>> list(['a','b'])
['a', 'b']
>>> list((1,2,'san'))
[1, 2, 'san']
可见:list函数适用于所有类型的序列,而不只是字符串。
同理,也可以将字符串组成的列表转换为字符串:
>>> ''.join(['a','b'])
'ab'
>>> ''.join(['abc','def'])
'abcdef'
注意:必须是字符串组成的列表才可以。
基本的列表操作
改变列表:元素赋值
使用索引标记为某个特定的,位置明确的列表元素赋值:>>> list1=[1,3,4]
>>> list1[0]=2
>>> list1
[2, 3, 4]
>>> list1=[]
>>> list1[0]=2
Traceback (most recent call last):
File "<pyshell#67>", line 1, in <module>
list1[0]=2
IndexError: list assignment index out of range
可见:不能为不存在的列表元素赋值;
正如之前学过的:如果希望创建不存在具备一定长度空列表,请使用None;
删除元素
使用del语句删除列表元素;>>> list1=['a','b',3]
>>> del list1[0]
>>> list1
['b', 3]
分片赋值
分片是个强大的特性,分片赋值更加强大;>>> list1=list('qwer')
>>> list1[2:4]='ew'
>>> list1
['q', 'w', 'e', 'w']
也可以使用与原序列长度不同的列表对分片进行替换:
>>> name=list('signjing')
>>> name[4:]='so'
>>> name
['s', 'i', 'g', 'n', 's', 'o']
>>> name[4:]='englist'
>>> name
['s', 'i', 'g', 'n', 'e', 'n', 'g', 'l', 'i', 's', 't']
使用空的分片进行替换可以对原序列进行插入操作:
>>> list1=list('qwer')
>>> list1[2:2]='ab'
>>> list1
['q', 'w', 'a', 'b', 'e', 'r']
同理,也可以使用空的序列对分片进行删除操作:
>>> list1=list('qwer')
>>> list1[1:3]=''
>>> list1
['q', 'r']
在学习序列的分片操作时学习到步长的概念,同样可以分片赋值:
>>> name=list('signjing')
>>> name[1:7:2]='ABC'
>>> name
['s', 'A', 'g', 'B', 'j', 'C', 'n', 'g']
>>> name=list('signjing')
>>> name[-2:-7:-2]='-_='
>>> name
['s', 'i', '=', 'n', '_', 'i', '-', 'g']
列表方法
一般来说,方法的调用方法:对象.方法(参数)
append
append方法在列表末尾追加新的对象。注意:append方法和其它一些方法类似,只是在恰当位置修改原来的列表。
这意味着,它不是简单地返回一个修改过的新列表,而是直接修改原来的列表。
>>> list1=list("copyright")
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't']
>>> list1.append('a')
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a']
>>> list1.append([2])
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a', [2]]
>>> list1.append((1,'3'))
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a', [2], (1, '3')]
count
count方法统计某个元素在列表中出现的次数:>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a', [2], (1, '3')]
>>> ['to','be','or','not','to','be'].count('to')
2
>>> x=[[1,2],1,[1,2,3],[1,2],1,3]
>>> x.count([1,2])
2
>>> x.count(1)
2
extend
extend方法可以在列表的末尾一次性追加另一个序列的多个值。换句话说,可以用新列表扩展原有的列表:
>>> list1=list("copyright")
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't']
>>> list1.extend('a')
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a']
>>> list1.extend([2])
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a', 2]
>>> list1.extend((1,'3'))
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a', 2, 1, '3']
看起来很像连接操作,extend方法修改了被扩展的序列,而连接操作则不会,只是返回了一个全新的列表。
>>> a=list('copyright')
>>> b=list('a')
>>> c=a+b
>>> c
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', 'a']
>>> a
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't']
>>> b
['a']
也可以通过分片赋值来达到extend方法的效果,但从可读性看来,显然不如extend。
>>> list1=list('copyright')
>>> list1[len(list1)-1]=[1,'3']
>>> list1
['c', 'o', 'p', 'y', 'r', 'i', 'g', 'h', [1, '3']]
index
index方法从列表中找出某值第一个匹配项的索引位置;>>> list1=list('tomorrow')
>>> list1.index('r')
4
>>> list1.index('o')
1
如果找不到会引发错误:
>>> list1.index('z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.index(x): x not in list
可以优化:
>>> if 'z' in list1:
... print list1.index('z')
... else:
... print "NOT FOUND"
...
NOT FOUND
insert
insert方法将对象插入到列表中;>>> list1=list('tomorrow')
>>> list1.insert(1,'ab')
>>> list1
['t', 'ab', 'o', 'm', 'o', 'r', 'r', 'o', 'w']
>>> list1.insert(2,('a','b'))
>>> list1
['t', 'ab', ('a', 'b'), 'o', 'm', 'o', 'r', 'r', 'o', 'w']
>>> list1.insert(2,['a','b'])
>>> list1
['t', 'ab', ['a', 'b'], ('a', 'b'), 'o', 'm', 'o', 'r', 'r', 'o', 'w']
同extend方法,insert方法也可以通过分片赋值完成:
>>> list1=list('tomorrow')
>>> list1
['t', 'o', 'm', 'o', 'r', 'r', 'o', 'w']
>>> list1[1:1]=['ab']
>>> list1
['t', 'ab', 'o', 'm', 'o', 'r', 'r', 'o', 'w']
>>> list1[2:2]=[('a','b')]
>>> list1
['t', 'ab', ('a', 'b'), 'o', 'm', 'o', 'r', 'r', 'o', 'w']
>>> list1[2:2]=[['a','b']]
>>> list1
['t', 'ab', ['a', 'b'], ('a', 'b'), 'o', 'm', 'o', 'r', 'r', 'o', 'w']
pop
pop方法默认移除列表中的一个元素(默认是最后一个元素),并返回移除的这个元素;>>> list1=list('tomorrow')
>>> list1.pop()
'w'
>>> list1
['t', 'o', 'm', 'o', 'r', 'r', 'o']
None不能被返回:
>>> list1=[None]*5
>>> list1
[None, None, None, None, None]
>>> list1.pop()
>>> list1
[None, None, None, None]
也可以通过索引指定要移除并返回的元素:
>>> list1.pop(3)
'o'
>>> list1
['t', 'o', 'm', 'r', 'r', 'o']
使用pop方法可以实现一种常见的数据结构——栈。
pop方法是出栈方法,python没有入栈方法,但可以通过append方法代替;
>>> list1=list("zhan")
>>> list1
['z', 'h', 'a', 'n']
>>> list1.append(list1.pop())
>>> list1
['z', 'h', 'a', 'n']
当入栈的元素等于刚刚出栈的元素时,得到的结果还是原来的栈;
remove
remove方法移除某值的第一个匹配项;>>> list1=list('tomoto')
>>> list1.remove('o')
>>> list1
['t', 'm', 'o', 't', 'o']
同index方法一样,当无匹配项时,返回错误:
>>> list1.remove('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
remove方法是一个没有返回值的原位置改变方法,与pop正好相反;
reverse
reverse方法将列表元素反向存放;>>> list1=list('abcde')
>>> list1.reverse()
>>> list1
['e', 'd', 'c', 'b', 'a']
该方法改变了列表,但也没有返回值,这一点同remove和sort方法;
sort
sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原来的列表,从而让其中的元素能够按一定的顺序排列,而不是简单地返回一个已排序的列表副本。当用户需要返回列表的已排序副本,同时又不希望改变列表时,是否可以这样:
>>> list1=list('signjing')
>>> list2=list1.sort()
答案是否定的,通过这种方式得到的list2是空值;
但可以通过将列表副本赋予新的列表,然后再使用sort方法进行排序:
>>> list1=list('signjing')
>>> list2=list1[:]
>>> list2.sort()
>>> list2
['g', 'g', 'i', 'i', 'j', 'n', 'n', 's']
>>> list1
['s', 'i', 'g', 'n', 'j', 'i', 'n', 'g']
再次强调,list1[:]是包含了列表list1所有元素的分片,这是一种很有效率的复制列表的方法。
另一种获取列表已排序列表副本的方法是使用sorted函数:
>>> list1=list('signjing')
>>> list2=sorted(list1)
>>> list2
['g', 'g', 'i', 'i', 'j', 'n', 'n', 's']
>>> list1
['s', 'i', 'g', 'n', 'j', 'i', 'n', 'g']
只是简单地将列表赋值给新的列表,是不可以的。因为,这样做,让list1和list2指向了同一个列表:
>>> list1=list('signjing')
>>> list2=list1
>>> list2.sort()
>>> list2
['g', 'g', 'i', 'i', 'j', 'n', 'n', 's']
>>> list1
['g', 'g', 'i', 'i', 'j', 'n', 'n', 's']
如果希望将一些元素按相反的顺序排序,可以先使用sort方法(或sort函数),然后再使用reverse方法。或者也可以直接使用reverse参数。
列表方法小结
方法名称 | 修改列表 | 返回值 |
append | 修改 | 无 |
count | 不修改 | 有 |
extend | 修改 | 无 |
index | 不修改 | 有 |
insert | 修改 | 无 |
pop | 修改 | 有 |
remove | 修改 | 无 |
reverse | 修改 | 无 |
sort | 修改 | 无 |
相关文章推荐
- Python基础教程学习笔记 第二章 列表和元组
- <<Python基础教程>>学习笔记 | 第02章 | 列表和数组
- python基础教程学习笔记 —列表和元祖(二)
- python基础教程学习笔记 — 列表和元祖(一)
- Python基础教程 第2章: 列表和元组 学习笔记
- python基础教程_学习笔记17:标准库:一些最爱——time
- python基础教程_学习笔记1:序列-1
- python基础教程_学习笔记22:数据库支持
- python基础教程_学习笔记21:文件和素材
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
- python基础教程_学习笔记24:网络编程、Python和万维网
- python基础教程_学习笔记4:元组
- python基础教程_学习笔记5:字符串
- python基础教程_学习笔记26:好玩的编程
- python基础教程_学习笔记13:标准库:一些最爱——sys
- python基础教程_学习笔记14:标准库:一些最爱——re
- python基础教程_学习笔记9:抽象
- python基础教程_学习笔记8:序列_练习与总结_1
- python基础教程_学习笔记10:异常
- python基础教程_学习笔记6:字典