Python编程中容易忽略的小知识点(二)(列表部分)
2014-07-15 21:23
288 查看
一、索引
1、如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。>>>fourth=raw_input('Year: ')[3] Year:2005 >>>fourth '5'
2、如果需要访问列表中最后三个元素,以下两种方法是可行的:
>>>numbers=[1,2,3,4,5,6,7,8,9,10] >>>numbers[7:10] [8,9,10] >>>numbers=[-3:] [8,9,10]
因为索引10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。
但是,下面这两种做法都是错误的:
>>>numbers[-3:-1] [8,9] >>>numbers[-3:0] []
原因是只要分片中最左边的索引比它右边的晚出现在序列中(在这个例子中是倒数第3个比第1个晚出现),结果就是一个空列表。
分片提取时列表的步长可以是负数,即从右到左提取元素:
>>>numbers[10:0:-2] [10,8,6,4,2]
3、列表和字符串是无法连接在一起的,两种相同类型的序列才能进行连接操作。
二、基本列表操作
1、在使用分片赋值时,可以使用与原序列不等长的序列将分片替换:>>>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]
上面的例子结果和del numbers[1:4]是一样的。
2、表示列表的变量名不能用list,原因是list是一个内建函数,如果使用其做变量名,就无法调用list函数了。
3、对于扩展原有的列表有三种方法:
(1)使用extend函数:
>>>a=[1,2,3] >>>b=[4,5,6] >>>a.extend(b) >>>a [1,2,3,4,5,6]
(2)原始的连接操作:
>>>a=[1,2,3] >>>b=[4,5,6] >>>a+b [1,2,3,4,5,6] >>>a [1,2,3]
比较可以发现,前两种方法的主要区别在于:extend方法修改了被扩展的序列,而原始的连接操作会返回一个全新的列表,a不会变。但是如果要改变a,连接操作比extend方法效率低。
(3)分片赋值:
>>>a=[1,2,3] >>>b=[4,5,6] >>>a[len(a):]=b >>>a [1,2,3,4,5,6]
虽然这么做是可行的,但是代码的可读性不如extend。
除此之外,插入操作除了使用insert函数,也可以使用分片赋值方法实现,但是同样,代码的可读性不如insert。
4、栈与队列的实现:
(1)栈的实现:
入栈(push)操作可以用函数append()(默认添加新元素到列表最后):出栈操作(pop)可以用函数pop()(默认移除列表中最后一个元素)来实现。
(2)队列的实现:
如果需要实现一个先进先出(FIFO)的队列(queue),可以使用insert(0,……)进入队列,用pop()出队;也可以继续用append方法,但必须用pop(0)代替pop()。
5、排序中有一点要注意,经常会出如下错误:
>>>x=[4,6,2,1,7,9] >>>y=x.sort() >>>print y None
没有得到排序结果的原因是sort方法用于在原位置对列表进行排序。因为sort方法修改了x却返回了空值,那么最后得到的就是已经排序的x以及值为None的y。实现这个功能的正确方法是,首先把x的副本赋值给y,然后对y排序。
三、元组
1、实现包括一个值的元组的方法是:必须加个逗号。>>>42, (42,) >>>(42,) (42,)
2、对于元组而言,逗号是很重要的,只添加括号是没有用的,(42)和42是完全一样的,一个逗号却能彻底改变表达式的值。
>>>3*(40+2) 126 >>>3*(40+2,) (42,42,42)
相关文章推荐
- Python编程中容易被忽略的小知识点(一)(基础知识部分)
- easyui容易被忽略掉的部分
- WCF中几个容易忽略的知识点
- 记载一些容易忽略但是重要的知识点
- Java容易遗忘的知识点列表(持续更新)
- 容易忽略的Java知识点(整理ing)
- Linux内核里容易忽略的几个小知识点
- Java容易忽略的几个知识点!!!
- 准备js面试容易被忽略的知识点总结(一)
- js 容易忽略的小知识点
- WCF中几个容易忽略的知识点
- Java常容易忽略的知识点面试点
- iOS开发中很重要,很常用,但却容易被忽略的知识点:id ,NSObject, id<NSObject>区别
- 【Java】【容易忽略的知识点】不可变类 (IMMUTABLE CLASS)
- Java学习心得——一些容易被忽略但很重要的知识点
- C中容易忽略的知识点
- C++基础知识容易忽略的知识点
- 黑马程序员——C语言知识小节------初学者容易忽略的知识点
- java容易忽略的小知识点
- 记录HTML5离线存储的一些比较容易忽略的知识点