Python:列表(list)

一:作用

二:定义

三:类型转换

四:内置方法

 

一:列表类型的作用

如果需存多个值并按顺序取,那用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 <module>
    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 <module>
    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()方法的作用是将列表清空

 

posted @ 2021-02-25 21:47  Sqlserverwooooo  阅读(295)  评论(0编辑  收藏  举报