天天看点

005-Python之列表,元组,字符串,bytes及bytearray共有操作

这几种数据结构的共性:

都是顺序存储

顺序访问

可迭代对象(可迭代对象可以用len方法获取其长度)

通过索引进行元素的访问

可以进行切片操作

切片不会对原有的序列做任何修改,切片的语法为:

从索引<code>start</code>开始,到索引<code>stop</code>结束,不包含<code>stop</code>,返回新的序列,不会对原有的对象做任何修改。

几个特性:

<code>start</code>超出索引范围:<code>start = 0</code>

<code>stop</code>超出索引范围:<code>stop = -1</code>

负数索引:实际上可转化为:<code>len(seq) + index</code>

当<code>start &amp;gt;= stop</code>时,返回空列表

slice的实现:

运行结果为:

如果有了步长之后,上面的规则就会发生变化。接下来加入步长的slice实现:

切片的一些常用操作:

如果索引超出范围,将引发<code>IndexError</code>的异常。修改元素的时候,如果超出索引范围,也同样引发<code>IndexError</code>异常。

<code>index(value)</code>方法根据value找索引

<code>count(value)</code>方法统计value出现的次数

enumerate的实现:

列表批量赋值:

不建议使用以上的方式对切片赋值的操作。

解构与封装可以叫做解包与封包。

解构把集合里的元素复制给变量;

封装是用变量构建元组。

解构:按照元素顺序,把线性解构的元素依次赋值给变量。

封装的例子:

定义一个元组,可以省略小括号。

封装出来的是元组。封装没有什么难度。解构的变化多样,接下来重点看看解构。

先看一个例子:

对上面的代码进行改写,由3行代码,变成了一行代码:

对于如下的代码操作,就是解包:

上面的代码使用的是元组,列表也是可以的:

接下来看一下封包:

继续看例子:

如果对一个含有2个元素的列表进行解包:

如果对一个含有一个元素的列表进行解包:

如果对一个空列表进行解包:

针对上述例子的总结:

左边不能只有一个星号,还要有其他元素

如果左边不用星号,那么左边的元素个数要与右边的元素个数相同

左边变量数小于右边元素个数,且左边没有加星号会报错

元素按照顺序赋值给变量

变量和元素必须匹配

加星号变量,可以接收任意个数的元素

加星号的变量不能单独出现

针对上述,写一个具体的例子:

更复杂一点的例子:

下面这个例子,在Python2中不能实现:

接下来还有更好玩的,如果我们要丢弃=右边某个值,可以使用下划线来,演示如下:

如果我们只想要序列的首位两个元素,可以这样操作:

再来一发,两边结构要一样:

对上面的例子,再来稍微变化一下,不过两边的结构要一样,解构是支持多层次的。:

注意:

解包的时候,两边的结构要一致 (重要的事情说三遍)

只要两边结构一样就行

python的一个惯例,使用单个下划线表示丢弃该变量。单个下划线也是Python合法的标识符,但是如果不是要丢弃一个变量,通常不要用单个下划线表示一个有意义的变量。

非常复杂的数据结构,多层嵌套的线性结构的时候,可以用解构快速提取其中的值。

版权声明:原创作品,如需转载,请注明出处。否则将追究法律责任

本文转自    bigstone2012   51CTO博客,原文链接:http://blog.51cto.com/lavenliu/2044036