Python:列表(list)

2021-03-01 10:25

阅读:405

标签:pycha   als   简便   module   列表   位置   range   one   ace   

一:作用

二:定义

三:类型转换

四:内置方法

 

一:列表类型的作用

如果需存多个值并按顺序取,那用list再合适不过了

 

二:列表类型的定义

l = [1,2,3,a]  ##相当于l = list(1,2,3,‘a‘)
print(l)
print(type(l))

以上代码执行结果为:

[1, 2, 3, a]
class list>

 

三:列表的类型转换

所有能被for循环遍历的数据类型都可以用list转换为列表

比如字符串:

hee = hello
print(hee)
print(type(hee))

llo = list(hee)
print(llo)
print(type(llo))

以上代码执行结果为:

hello
class str>
[h, e, l, l, o]
class list>

list在这里起到的作用跟for循环是一样的,相当于进行了如下操作:

nam = []         #定义一个空列表
ee = hello
for i in ee:         #遍历字符串ee
    nam.append(i)        #使用append方法将i存入nam空列表

print(nam)

以上代码执行结果为:

[h, e, l, l, o]

再比如字典:

ee = {lihua:1,wangwu:2,zhaosi:3,wangermazi:4}
print(ee)
print(type(ee))

name = list(ee)
print(name)
print(type(name))

以上代码执行结果为:

{lihua: 1, wangwu: 2, zhaosi: 3, wangermazi: 4}
class dict>
[lihua, wangwu, zhaosi, wangermazi]
class list>

 

四:列表的内置方法

4.1按索引存取值:

正向取:

ll = [lizi,1,666,nb]
print(ll[0])

以上代码执行结果为:

lizi

反向取:

ll = [lizi,1,666,nbgls]
print(ll[-1])

以上代码执行结果为:

nbgls

修改值:

ll = [lizi,1,666,nbgls]
ll[3] = lizi666
print(ll)

以上代码执行结果为:

[lizi, 1, 666, lizi666]

需要注意的是,无论是取值还是赋值都无法对一个不存在的索引进行操作,操作必报indexerror错误:

ll = [lizi,1,666,nbgls]
ll[4] = lizi666
print(ll)

以上代码执行结果为:

Traceback (most recent call last):
  File "D:\PyCharm\lizi\basis\20200225\list.py", line 33, in 
    ll[4] = lizi666
IndexError: list assignment index out of range

4.2列表添加值:

追加:

ll = [lizi,1,666,nbgls]
ll.append(woaini)
print(ll)

以上代码执行结果为:

[lizi, 1, 666, nbgls, woaini]

插入:

ll = [lizi,1,666,nbgls]
ll.insert(2,99999)
print(ll)

以上代码执行结果为:

[lizi, 1, 99999, 666, nbgls]

现在问题来了,我有一个需求要将一个列表里的值插入到另一个列表怎么做呢?使用append方法试一下:

sss = [1,2,3]
ll = [lizi,1,666,nbgls]
ll.append(sss)
print(ll)

以上代码执行结果为:

[lizi, 1, 666, nbgls, [1, 2, 3]]

显然这与我的需求是相违背的,那么既然append插不了我用for遍历插总可以了吧:

sss = [1,2,3]
ll = [lizi,1,666,nbgls]
for i in sss:
    ll.append(i)
print(ll)

以上代码执行结果为:

[lizi, 1, 666, nbgls, 1, 2, 3]

很好,要的就是这种效果。

但是问题又来了,不复杂的一个需求为什么要用一个循环去解决呢是不是太麻烦了?

python提供方法的初衷就是把一些常用的操作进行封装方便直接使用,在上面这种情况下python提供了extend方法:

sss = [1,2,3]
ll = [lizi,1,666,nbgls]
ll.extend(sss)                                   # for i in sss:
print(ll)                                        #     ll.append(i)

以上代码执行结果为:

[lizi, 1, 666, nbgls, 1, 2, 3]

这下好了,不用循环了只需一个.方法即可解决实际问题!

4.3删除列表值:

单纯删除:

ll = [lizi,1,666,nbgls]
del ll[2]
print(ll)

以上代码执行结果为:

[lizi, 1, nbgls]

del只是单纯的根据索引将值删除,没有任何返回值,如果你强行定义一个返回值,那么解释器会报语法错误

根据元素删除:

ll = [lizi,1,666,nbgls]
ll.pop()
print(ll)

以上代码执行结果为:

[lizi, 1, 666]

.pop()方法可以根据在()里指定索引的方式删除值,如果()里没有指定索引,那么默认会删除最后一个索引值

.pop()方法有返回值:

ll = [lizi,1,666,nbgls]
des = ll.pop(2)
print(des)

以上代码执行结果为:

666

可以发现,以des定义的返回值的结果,正是.pop()方法删除的那个索引值

根据元素删除:

ll = [lizi,1,666,nbgls]
ll.remove(666)
print(ll)

以上代码执行结果为:

[lizi, 1, nbgls]

.remove()方法只能用元素去删除,如果你想使用该删除一个列表,那么你只能将要删除的列表整个写入.remove()方法的括号里

.remove()方法也有返回值但它返回的是一个None:

ll = [lizi,1,666,nbgls]
des = ll.remove(666)
print(des)

以上代码执行结果为:

None

所以,如果你想利用返回值来进行后面的操作的话,那么还是使用.pop()方法比较好。反之,如果你只是单纯的想删除某一个元素,那么del和.remove()比较适用

4.4列表的切片操作:

切片操作只要记住一句话,顾头不顾尾

指定索引位置进行切片:

ll = [lizi,1,666,nbgls]
print(ll[0:-1])

以上代码执行结果为:

[lizi, 1, 666]

从结果可以看出,取值范围从索引位置0开始到3之前也就是2结束

根据条件按索引取值:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp]
print(ll[0:6:2])

以上代码执行结果为:

[lizi, 666, 赵日天]

从结果可以看出,取值范围从0开始到6之前也就是5结束,取值方式为每两个位置取一次值

前边介绍的是从前往后取值,那我如果想从最后一个往前取值呢?倒叙取值:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp]
print(ll[:0:-1])

以上代码执行结果为:

[lsp, 小王八, 赵日天, nbgls, 666, 1]

从结果可以看出,如果想倒叙取值,那么就算每一个取一次也要加个-1,两次就是-2

既然顾头不顾尾那我是不是永远没法取最后一个值呢?完整取值可以使用len()方法:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp]
print(ll[0:len(ll)])

以上代码执行结果为:

[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp]

len()方法可以获取列表的长度,在某些情况下比较有用。当然对于上面的需求,还有更简便的取完整值方法:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp]
print(ll[:])

以上代码执行结果为:

[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp]

反向取亦然:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp]
print(ll[::-1])

以上代码执行结果为:

[lsp, 小王八, 赵日天, nbgls, 666, 1, lizi]

切片操作相当于浅copy,也就是说如果给原值赋一个新值,如果原值改变,那么新值也会跟着改变:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp,[1,2,3]]
new_ll = ll
print(ll)
print(new_ll)

ll[-1][1] = 333
print(ll)
print(new_ll)

以上代码执行结果为:

[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp, [1, 2, 3]]
[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp, [1, 2, 3]]
[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp, [1, 333, 3]]
[lizi, 1, 666, nbgls, 赵日天, 小王八, lsp, [1, 333, 3]]

从结果可以看出,在ll列表的最后一个值的第一个索引改变的情况下,new_ll的值也跟着一起改变

in方法可以判断某个值是否为某个列表的元素:

ll = [lizi,1,666,nbgls,赵日天,小王八,lsp,[1,2,3]]
print(lizi in ll)
print(hahah in ll)

以上代码执行结果为:

True
False

in方法的结果只有true和false

4.5列表的其他一些方法:

.count()方法:

l = [lizi,1,666,nbgls,赵日天,小王八,lsp,[1,2,3],1]
print(l.count(1))

以上代码执行结果为:

技术图片

 

 

 由执行结果可知,.count()方法的作用是统计列表中某个元素出现的总次数

.index()方法:

l = [lizi,666,nbgls,1,赵日天,小王八,lsp,[1,2,3],1]
print(l.index(1))

以上代码执行结果为:

技术图片

 

  由执行结果可知,.index()方法的作用是得到列表中某个元素的索引位置,如果有相同的元素,那么得到的结果为出现的第一个元素位置

.reverse()方法:

l = [lizi,666,nbgls,1,赵日天,小王八,lsp,[1,2,3],1]
l.reverse()
print(l)

以上代码执行结果为:

[1, [1, 2, 3], lsp, 小王八, 赵日天, 1, nbgls, 666, lizi]

由执行结果可知,.reverse()方法的作用就是将列表倒过来

.sort()方法:

l = [1,2,3,4,7,8,6,5]
l.sort()
print(l)

以上代码执行结果为:

[1, 2, 3, 4, 5, 6, 7, 8]

由执行结果可知,.sort()方法的默认作用就是将列表按从小到大的顺序排序

那如果我想按从大到小的顺序排呢?

.sort()方法可以传两个值,其中key可以与函数配合使用,reverse设置为True,就可以实现将元素按从大到小的顺序排:

技术图片

l = [1,2,3,4,7,8,6,5]
l.sort(reverse=True)
print(l)

以上代码执行结果为:

[8, 7, 6, 5, 4, 3, 2, 1]

需要注意的是,.sort()方法只能将同类型元素进行排序,如果非要排不同种元素那么会直接报数据类型错误:

l = [1,2,3,4,7,nb,8,6,5]
l.sort()
print(l)

以上代码执行结果为:

Traceback (most recent call last):
  File "D:\PyCharm\lizi\basis\20200225\list.py", line 65, in 
    l.sort()
TypeError:  not supported between instances of str and int

浮点型和整型可以进行排序

.clear()方法:

l = [1,2,3,4,7,nb,8,6,5]
l.clear()
print(l)

以上代码执行结果为:

技术图片

 

由执行结果可知,.clear()方法的作用是将列表清空

 

Python:列表(list)

标签:pycha   als   简便   module   列表   位置   range   one   ace   

原文地址:https://www.cnblogs.com/liziaoligei/p/14448077.html


评论


亲,登录后才可以留言!