python list的常用方法

Python list中常用的方法有创建列表,添加新元素,查看列表中的值,删除list中的元素,排序和反转以及list切片等方法

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现,接下来在文章中将为大家具体介绍Python中列表的常用方法,具有一定的参考作用,希望对大家有所帮助。

【推荐课程:Python教程】

Python list的常用方法

(1)创建列表

使用逗号将不同的数据分隔开再使用方括号括起来即可,下标从0开始,最后一个元素的下标可以写成-1

list = ['1',"2,"3’]

list = [] //空列表

(2)添加新的元素

添加新元素的方法有三种,分别为:

append方法:在列表的末尾添加一个元素

list.append()

insert方法:表示在指定位置添加元素,如果未指定则在列表的末尾添加

list.insert(n,'4')

extend方法:合并列表1,列表2中的元素

list1.extend(list2)

(3)查看列表中的值

可以使用print方法来遍历列表,此方法相当于for i in list

print(list[n]): 表示使用下标索引来访问列表中的值

print(list.count(xx)) :表示查看某个元素在这个列表里的个数,如果改元素不存在,那么返回0

print(list.index(xx)):表示找到这个元素的下标,如果有多个,返回第一个,如果找一个不存在的元素会报错

(4)删除list 中的元素

list.pop(): 删除最后一个元素

list.pop(n):指定下标,删除指定的元素,如果删除一个不存在的元素会报错

list.remove(xx) :删除list 里面的一个元素,有多个相同的元素,删除第一个

del list[n] :删除指定下标对应的元素

del list: 删除整个列表, list删除后无法访问

(5)排序和反转

list.reverse():表示将列表反转

list.sort():表示排序,默认情况下指升序

list.sort(reverse=True):表示 降序排列

注:list 中有字符串,数字时不能排序,排序针对同类型

(6)list 切片

切片是list 取值的一种方法

name[n:m]:表示切片不包含后面那个元素的值

name[:m]:表示如果切片前面一个值缺省的话,则从开头开始取

name[n:] :表示如果切片后面的值缺省的话,则取到末尾

name[:] :表示如果全部缺省,则取全部

name[n:m:s] :表示隔多少个元素取一次,其中s表示步长

若步长是正数,则从左往右取

若步长是负数,则从右往左取

注:切片同样适用于字符串,字符串也有下标

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。

以上就是python list的常用方法的详细内容,更多请关注码农之家其它相关文章!

Python 多维List创建的问题小结

背景

最近在学Python,我觉得学习一个新语言最好的方式就是写一个简单的项目,所以就打算写一个简单的俄罗斯方块游戏。那么在写的过程中遇到了一个小问题。

def __init__(self, width = 10, height = 30):

self.width, self.height = width, height

self.board_size = [width, height]

我用一个二维List来记录游戏空间的状态,game_boardx代表一个格子,0代表这格子是空的,1代表不是。很显然,初始化的时候应该将所有的格子都赋值为0。查询了一下List的相关文档,发现可以用[0] * n这样的方式来快速创建特定长度的List,因此很自然的写出了下面这行代码。

self.game_board = [[0] * height] * width

查看一下结果,确实创建了长宽符合预期、值全部都是0的一个二维List,感觉没什么问题,就接着往下写了。

问题

但这两天在写消除方法的时候,使用最下面3排全是1,第四排中间是1其他全是0,这样消除完成之后应该还剩1个1掉落到第一排。但测试过程中发现无论如何都会导致所有的1都被消除了,一开始我还以为是消除的算法有问题,但后来在每一步过程中都监控整个game_board的状态时才发现,当一横排有一个值为1的时候,这一横排所有值都自动变成1了。

解决

很自然的就想到,这是由于List对象的引用产生的。[0] * height产生了长度为height并且内容全是0的List,由于0是个int,是基础数据类型,因此这样使用是正确的。但用这个List去进行* width操作时,产生的都是这个List的引用,而不是新建了width个List,所以修改其中任意一个就全部都修改了。

经过查阅Python文档,将代码修改为:

self.game_board = [([0] * height) for i in range(width)]

测试发现问题解决。

创建二维数组的办法

直接创建法

test = [0, 0, 0], [0, 0, 0], [0, 0, 0]]

简单粗暴,不过太麻烦,一般不用。

列表生成式法

test = [[0 for i in range(m)] for j in range(n)]

学会使用列表生成式,终生受益。

使用模块numpy创建

import numpy as np

test = np.zeros((m, n), dtype=np.int)

总结

其实是很基础的问题,对于Python *这个运算符不够了解,因此想当然觉得代表了对对象进行深拷贝。而且可能前端做多了,对数据结构这种基础不太敏感了吧,还是要多做练习啊。