1、列表

  列表是一种数据类型,顾名思义,他会有多列,像一张表格一样,不过这张表格只有一行,但有多列,他的表现形式是把各种数据类型值放在[]里面并以逗号分隔,里面的数据类型可以是同类型,也可以是不同的类型,例如: 

test = ['hello', 3.1415, True, None, 42]

test1 = ['cat', 'bat', 'rat', 'elephant']

 列表里面有多列,那怎么去访问这些列呢?列表是有序的,每个元素都会对应一个索引,这个索引的范围为0len(test)-1之间的整数,例如:

     print(test[5])会报错,因为最大索引为len(test)-1 = 4,5已经超出了索引的范围。

 既然list可以包括各种数据类型,当然list也可以包括list

 

  除了使用正数作为索引,列表还可以使用负整数做为索引,最后的个元素的索引为-1,倒数第二个元素为-2,依次至第一个元素的索引为-len(test),例如:

 

2、切片

  使用单个索引可以获取一个值,如果要获取多个值呢?只需要指定索引范围,以冒号分隔,并以新的列表返回,形式如下:

list[start_index:end_index]

 start_index指定要获取的值的开始位置,end_index指定最后一个值的索引位置,但不包括这个值,例如:

  还有一个更加快捷的方式,你可以省略start_index或者end_index,甚至两个都省略,省略start_index,start_index默认被设置为0,省略end_indexend_index会被默认设置为len(list)的长度,如下:

 

3、计算列表的长度

  列表长度的计算是指列表里面含有多少个元素,使用len(list)即可。

 

4、改变列表某个元素的值

  既然可以使用索引来获取某个元素的值,那么要改变这个元素的值也很简单,只需要把元素用索引找出来,当成变量,把值赋给他就可以了,如下:

 

5、列表连接和复制

  +可以把两个列表连接起来,返回一个新列表,*可以用于重复列表很多次

 

6、从列表中删除元素

  删除元素只要在位置前加del,例如:

 

 

7、innot in操作符

    in用于判断一个元素是在一个列表内,not in用于判断一个元素不在一个列表内,返回的是boolean值。

 

 

8、列表循环

  可以用for循环取出列表中的索引和元素,以便于做其他操作,有两种格式:

# 每次for循环的时候,变量都会被赋值于列表中的某个元素值

for 变量名 in list:

    对变量做操作


# 先循环得到索引,然后再通过索引得到其值

for i in range(len(list)):

    print('索引 ' + str(i) + ' ,值: ' + list[i])


# 使用enumerate函数,enumerate返回当前索引以及这个索引位置的值

for index, item in enumerate(list):

    print('索引 ' + str(index) + ' ,值: ' + item)

 

9、random模块与列表

  • random.choice(list):从列表中随机返回一个元素
  • random.shuffle(list):对列表重新排序

 

  

 

10、增强操作符

  增强操作符实际上是=-*/%操作的简化,如果你要对变量spam1,你会写spam=spam+1这段代码,但用 增强操作符会更加简单,spam  += 1,等价于spam = spam +1,

所有的增强操作符总结如下:

原操作

等价操作

spam += 1

spam = spam + 1

spam -= 1

spam = spam -1

spam *= 1

spam = spam * 1

spam /= 1

spam = spam / 1

spam %= 1

spam = spam % 1

 

 

11、常见列表方法

  方法和前面说的函数一样,只不过在调用时要在方法前加上列表名。

  • index(arg)

   index(arg)返回列表中arg的索引位置,如果在列表中不存在arg这个元素,则会引发错误

 

  • append(arg)insert(index,arg)

    append(arg): arg这个元素插入到列表末尾

  • insert(index,arg): index指定的索引位置插入元素arg

 

  • remove(arg)

   remove(arg): 从列表中移出元素arg,如果不存在,则会引发一个错误

  

 

  • sort(reverse=boolean,key=str.lower)
  • sort(reverse=boolean,key=str.lower)

  用于对列表排序,但前提是列表中是同种的整数或者字符串类型,不能是其他数据类型,也不能混合数字和字符串类型。默认情况下,是以数字或者字母升序排列的,小写字母排在大写字母之后,不过可以通过以下两个参数更改默认行为:

      reverse: True 或者 False,False是默认升序,True是降序

      key=str.lower: 忽略字母大小写,按在字母表中的顺序排列

 

  • reverse()

   reverse(): 用于反转列表,也就是说,最后一个元素成为列表的第一个元素,倒数第二个元素成为列表的第二个元素,直到第一个元素成为列表的最后一个元素。

 

12、序列化数据类型

  序列化数据类型是指这种类型是有顺序的,常见的序列化数据类型有listtuplestringsrange()返回的范围对象,针对序列化类型,很多操作都是通用的,比如:索引、切片、for循环、len()innot in等。

 

13、可变数据类型与不可变数据类型

  • 可变数据类型:可以针对这种数据类型的值进行增加、删除、改变等操作,list属于可变数据类型。
  • 不可变数据类型: 不能对这种数据类型进行增加、删除、改变等操作,除非重新赋值一个新的值,stringstuple属于不可变数据类型,你不能改变stringstuple里面的单个值。

14、元组

  元组其实和列表基本是一样的,除了三方面:

  • 元组是用圆括号括起来的,而列表是用方括号,例如元组(a,b,c)
  • 元组是不可改变的,而列表是可变的
  • 单个值的元组需要要加逗号,例如(a,),否则会被当成字符串

  元组相对于列表有一个显著的优势,python对元组做了一些优化,速度上较列表要快一些,如果你的数据不可变,尽量使用元组吧。

 

15、元组与列表的相互转换

  • list(): 可把元组转换成列表
  • tuple(): 可把列表转换成元组

 

16、值传递与指针传递

  当我们创建一个变量并对其赋值时,实际上我们变量中存储的是一个指针,这个指针是计算机内存中的一个地址,可以使用id(变量名)取得,对于不可变变量,如果改变其值,实际是新创建一个不可变值,把其在内存中的地址赋给这个变量。如果是可变类型,例如listdict,改变list或者dict本身,变量不会指向新的地址,如下:

 

  对于函数传参来说,尤其要注意,因为函数内可以更改listdict,如果在传递参数时不希望被函数内部更改,可以使用copy模块,copy模块有两个函数:

  • copy.copy(): 浅拷贝,会把listdict里面的元素赋值给新的变量,但不会复制listdict里面包括listdict的情况,适用于listdict里面只包括不可变数据类型的场景
  • copy.deepcopy(): 深拷贝,可以复制listdict里面包括listdict的场景,适用于各种场景,包括listdict里面包括listdict

原创文章,转载请注明出处:http://www.nwumba.cn/article/12/