python中列表切片操作非常普遍、如l=list,Python:列表(list)

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()方法的作用是将列表清空

Python:列表(list) 相关文章

单向链表

单向链表 一、链表介绍 链表是有序的列表,但是它在内存中是不连续存储的,链表分单向链表、双向链表和循环链表,先回顾单向链表 单向链表的特点: 链表是以节点的方式来存储,是链式存储 每个节点包含data域,next域 链表的各个节点不一定是连续存储的 链表

利用python+arcgis将模型生成的二值预测结果图转化为线矢量并计算长度

1.模型生成的二值预测图如图所示(已将原始数据的坐标系通过gdal转到预测图中) 2.采用如下代码将其转化为面矢量 1 def polygonize(inImgPath, outImgPath): 2 inImg = CXImage() 3 inImg.Open(inImgPath) 4 srcband = inImg.proDataset.GetRasterBand(1) 5

LeetCode | 0652. 寻找重复的子树【Python】

问题 力扣 给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。 两棵树重复是指它们具有相同的结构以及相同的结点值。 示例 1: 1 / \ 2 3 / / \4 2 4 / 4 下面是两个重复的子树: 2 /4 和 4 因此,你需要以

zblog批量调取多个分类及其分类下的文章列表

{$b = array('11','27','28','31','26','30','7');}{*按顺序填入分类ID*}{foreach $b as $key = $cid}div class="sort-list xiangguan"div class="proitemtop clearfix"small class="kico-ni"相关文章/small{$array=Getlist(4,$cid,null,null,null,null,arra

【CF585E】Present for Vitalik the Philatelist

题目 题目链接:https://codeforces.com/problemset/problem/585/E 有一个包含 \(n\) 个 \(\in [2, 10^7]\) 的整数的可重集合。 要求满足条件的一个元素 \(x\) 和一个集合 \(S\) 的方案数。 条件:\(x \notin S\),\(\gcd\{S\} 1\),\(\gcd(x, \gcd\{S\}) =

[Violent Python] - Building An SSH Botnet With Python

Now that we have constructed a port scanner to find targets, we can begin the task of exploiting the vulnerabilities of each service. The Morris Worm includes forcing common usernames and passwords against the remote shell(RSH) service as

Python 使用ftplib切换指定ftp目录不存在则创建目录和上传下载文件

https://www.cjavapy.com/article/719/ 1、ftplib的常用方法 1)ftp登陆连接 from ftplib import FTP #加载ftp模块ftp=FTP() #设置变量ftp.set_debuglevel(2) #打开调试级别2,显示详细信息ftp.connect("IP","port") #连接的ftp sever和端口ftp.login("user"

【Python】如何用较快速度用Python程序增加博客访问量——CSDN、博客园、知乎(应该包括简书)

首先有几个要点: 用一个ip连续访问是肯定不行的,博客的系统肯定有算法等着你呢 所以就得换着使用不同的ip访问,这样博客的系统是不能“拒绝”你的。 当然,你需要空开时间访问,要不然密集的访问也会让博客“有反应” 解决方案:多线程+用不同的ip请求+无

Python中匿名函数的应用

from functools import reducelist1 = [13, 22, 42, 33, 57, 32, 56, 37]tuple1 = (13, 22, 42, 33, 57, 32, 56, 37)tuple2 = (2,)list2 = [{'a': 10, 'b': 20}, {'a': 13, 'b': 20}, {'a': 9, 'b': 20}, {'a': 29, 'b': 20}]# 求可迭代对象中的最大值m = ma

Pygame基础(1)

Pygame是Python的一个很常用的游戏框架,今天我来讲一讲Pygame的基础知识 Pygame的官网:https://www.pygame.org/news Pygame的下载 打开cmd输入pip install pygame即可,前提是你要先安装Python(有点像废话……)。 输入之后,它就会自动安装了,效果如下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值