Python随记(一)列表和元组

Python随记(一)列表和元组

Python中最基本的数据结构就是序列了。Python一共包含6种内建序列:列表、元组、字符串、Unicode字符串、xrange对象、buffer对象。序列都可以进行的操作包括索引,切片,加,乘,检查成员。

本篇随记先讲两个最基础的序列:列表元组。其实这两个很像C++中的数组结构,但是有其本身的特点,各位学习的过程中可以自己联想其中的共通性,但是不要搞混淆。

一、列表(List)

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

List1 = [1, 2, 3, 4, 5 ];

List2 = [‘a’ , ’b’ , ’c’ ,’d’ , ’e’ , ’f’ ];

列表的数据项不需要具有相同的类型:

List3 = ['A', 'B', 1, 2];

这三个List作为例子下文会用到。。。

1、 索引(indexing

序列中的所有元素都是有标号的,和其他很多语言一样,是从0开始的。

可以通过索引来访问列表中的某个元素,如List3[0]的值就是‘A’,

索引可以为负数,但是最后一个元素的索引对应的是-1只有正序第一个元素的索引为0。

2、 分片(sliding)

分片操作用来访问一定范围内的元素,分片通过冒号隔开的两个索引实现。这两个索引作为边界,第1个索引包含在分片内,第2个索引是剩下的元素中的第一个元素的索引。比如List[m : k+1]其实是指的是索引为 m~k这个区间的元素。

以上文中提到的三个List来举例哈:

①  普通情况:

如List2[1,4]=[‘b’, ‘c’, ‘d’]

List2[0: 6] =[‘a’, ’b’ , ’c’ ,’d’ , ’e’ , ’f’ ];,虽然我们的索引其实只是0到5,但是这里第二个边界写6是可以的,因为只取到索引为(6-1)的这个元素为止,并没有超出List2的大小。

②这里的索引同样可以为负数:

List2[-4 : - 1] = [‘c’, ‘d’, ‘e’],注意这里第二个边界虽然写的是-1,但是同样是不能把索引为 -1的这个元素包含进去的,那么我现在想把最后一个元素也包含进去该怎样做?

List2[ -4:  ] = [‘c’, ‘d’, ‘e’, ‘f’],就是说直接把第二个边界空着,它就会一直包含到底。

③其他步长的情况:

其实在分片时,不止可以提供两个边界,还可以提供第三个参数,步长。前面不写,程序就是用的默认步长:+1.

List2[0: 6,2] =[‘a’ , ’c’ , ’e’ ] 

这里步长为2,所以取的其实就是List2[0]、List2[0+2]、List2[0+2*2]这三个元素。

④逆序(步长为负数)

前面的三种情况,我们输出的列表的元素的顺序和原来列表的顺序是一致的,因为默认的步长是+1!其实也可以倒着输出,这时候把步长设置为负数就好。注意,步长为负数时,第一个边界对应的索引应该比第二个边界大,这样才能倒着输出:

List2[6:0,-1] =[‘f’, ‘e’, ‘d’, ‘c’, ‘b’, ‘a’];

注意,此处来个对比

List2[0:6, 2] =[‘a’ , ’c’ , ’e’ ]

List2[6:0,-2] =[‘f’ , ’d’ , ’b’ ]

一个是正序,一个是逆序,只不过步长的绝对值是2,这样能看出区别来,不要以为逆序就是简单的把正序给倒过来而已

List2[0:6, 2]取的其实就是List2[0]、List2[0+2]、List2[0+2*2]这三个元素!

List2[6:0,-2]取的是List2[5]、List2[5-2]、List2[5-2*2]这三个元素!为什么这样呢,因为倒序时,我的第一个边界其实就是刚才正序时的尾边界,所以仍然要执行减一这个操作!

3、 序列相加

这一步其实很像C++中字符串string类的操作,就是两个相同类型的序列相加之后得到一个新序列。何谓相同类型,就是我最开始说的序列包含6个种类,(一定不要把序列(Sequence)和列表(List)搞混啊,列表只是序列的一种,序列是个大概念),相同种类的序列才能相加

4、 乘法

用数字K乘以一个序列会生成一个新的序列,而新的序列中,原来的元素将会被重复K次。

空列表:[ ]

如果想要构造一个占K个元素空间的空列表,可以有[None] * K。

5、 成员资格

检查一个值是否在列表中,可以使用in运算符。返回值为false或者true。

6、 列表的一些基本操作

①赋值和分片赋值(太简单不讲了)

这里有个点要注意!!!

如果已有一个列表List1,使用赋值 y=List1,         其实并没有新创建一个列表。

这样的操作使得y和List1指向同一个列表,有点C++中引用的意思。

正确的给新的列表的赋值的方式是 y = [ : ],这样就得到一个新的列表且元素和y一模一样了。

②删除元素:就是用del语句实现(delete的前三个字母)

7、 基本的列表方法

append,用于在列表末尾追加新的对象(其实append的英文意思就是添加)

List1 = [1, 2, 3, 4, 5 ];

List1.append(9)

List1= [1, 2, 3, 4, 5, 9 ]

count方法统计某个元素在列表中出现的次数,返回值就是次数

extend,在列表的末尾一次性追加另一个序列中的多个值。就是可以用新列表扩展原有列表。

List1 = [1, 2, 3, 4, 5 ];

List2 = [‘a’ , ’b’ , ’c’ ,’d’ , ’e’ , ’f’ ];

List1.extend( List2)

List1 =  [1, 2, 3, 4, 5, ‘a’ ,’b’ , ’c’ ,’d’ , ’e’ , ’f’ ];

看起来很像加法,实则不然!这个操作中,List1的值已经更新了,是对List1的操作。而加法运算,两个序列相加后,原来的两个序列还在,没变,产生的新的序列占用的是新开辟的内存空间。

 ④index 用于从列表中找出某个值第一个匹配项的索引位置

 ⑤insert 用于将对象插入到列表

List1 = [1, 2, 3, 4, 5 ]

List1. Insert(3,‘A’)

List1 = [1, 2, 3, ‘A’, 4, 5 ]

可见把原来索引为3的元素4以及后面的元素5都依次后移,然后在索引为3的位置插入了新的元素。

⑥pop    移除列表的一个元素,默认是最后一个。它是惟一一个既返回数值,且同时修改原列表的列表方法。

List1.pop( )   默认移除最后一个元素

List1.pop(2)  移除索引为2的元素,是以索引为参考

⑦remove 移除列表中某个值的第一个匹配项

  个人感觉这个操作相当于,先用index找出你要的找的这个元素索引,然后我用pop( )方法去移除这个索引位置元素。现在这两个操作融合到一起,就成了remove(这是我自己的感觉,有错误还请指正0-0),直接找元素然后删元素。

⑧reverse  将列表中的元素反向存放

⑨sort    用于在原位置对列表进行排序,意味着也是要改变原来的列表而不是简单的返回一个副本而已。

  如果你想既要有原来的列表,又要有换序后的列表.有两种操作方法,

A、y=List1[ : ]

y.sort( )

这样List1还在,而y是换序后的列表

B、 使用sorted 函数

Y = sorted ( List1)

二、元组(Tuple)

元组与列表一样,也是一种序列。唯一的不同是元组不能修改(字符串同样也不能修改)

1、  创建元组

如果用逗号分隔开了一些值,那么就自动创建了元组。

如:输入 2,3,4

得到(2,3,4)

元组大部分时间是通过圆括号括起来的。

注意,如果要创建一个只有一个元素的元组,同样要添加逗号。

>>>123

123

>>>123,

(123,)

>>>(123,)

(123,)

2、  元组和列表的相互转化

list()函数将元组转化为列表

输入list( (1, 3, 5, 7) )

就等于[1, 3, 5, 7]

,tuple函数将列表转化为元组

输入tuple( [2, 4, 6, 8] )

就得到 (2, 4, 6, 8)

3、  元组操作,

因为元组不可变,所以其实基本上就是创建和访问元组这些操作,没有像列表那么多的操作。

访问通过索引方式访问,分片也一样的操作。

4、  意义何在?

①元组可以在映射(和集合的成员)中当作键使用,而列表不行

②元组作为很多内建函数和方法的返回值存在。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

javascript中函数声明和函数表达式浅析

1429
来自专栏C/C++基础

C++对象产生和销毁的顺序

C++中,如果对象是用new操作生成的,那么它的空间被分配在堆(Heap)上,只有显示地调用delete(或delete[])才能调用对象的析构函数并释放对象的...

370
来自专栏java学习

面试题12(如何正确使用this)

哪些语句能放在如下代码中所示位置,而不会导致编译错误? public class ThisUse{ int plane; static int ...

2483
来自专栏lzj_learn_note

3-序列、列表、元组

序列就是一堆数据元素的集合,并对每个元素进行编号。在Python中,字符串、列表、元组都属于序列,他们都具有一些特定的操作,如索引、切片、相加、相乘、in、长度...

793
来自专栏个人随笔

房上的猫:字符串

一.使用字符串  1.方法:   (1)定义并初始化字符串   (2)使用字符串,对字符串进行一些处理  2.语法:  (1)String s = ""; ...

3587
来自专栏Nian糕的私人厨房

C_10 指针拓展

指针是内存地址 指针在定义的时候, * 表示指针标识符 指针在使用的时候, * 表示取内容

553
来自专栏转载gongluck的CSDN博客

python笔记:#013#高级变量类型

高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (in...

3178
来自专栏Java架构师历程

==和equals的区别

当执行String s1 = “chance”;这条语句时,会在堆中的字符常量池里找”chance”这个字符串,若没有找到,则将”chance”这个字符串放入字...

1222
来自专栏cs

python字符串

慕课网 首发了,放在垂直领域吧。 python字符串是一种元素为字符的序列类型。因为序列类型是元素被顺序放置的一种数据结构,因此可以通过索引来获取某一个字符,...

3009
来自专栏开发与安全

从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字

一、构造函数、默认构造函数 (1)、构造函数 构造函数是特殊的成员函数 创建类类型的新对象,系统自动会调用构造函数 构造函数是为了保证对象的每个数据成员都...

2110

扫码关注云+社区