跟我一起学python3/20 ---“列表”

前言

我相信很多朋友都会跟我一样,一直听身边的人说python是比较简单的编译语言,但是对于没有任何编程基础的小白来说,单纯的浏览CSDN这个网站都头大。作为有着同样痛点的我,今天开始发布我的第一篇帖子,手把手教同为小白的朋友们一起学习python一起进步。

我学习python的方式主要是自己看书学习,如果有朋友想要相关方面的电子书资源可以评论区留言或者私信。

关于我的介绍:
目前是本科大三在读,爱丁堡大学商学院商业管理专业
对于学习python纯属是因为我个人的兴趣,本来今年的计划是学习Java的,但是由于考虑到将来要做的数据分析和各种研究报告可能会用到python(主要是因为python比java简单😂)这才开始了我的python学习之旅

本身由于我就是小白,我也会分享在我学习的时候遇到的各种问题,以及怎么解决的。本身这个贴就是面向小白的,各位如果看到我的问题分享依旧解决不了自己的疑问的话,可以直接分享到评论区,供大家一起参考学习。随着持续的更新,我会不定期根据评论区各位的疑问制作专门的解疑答惑贴。

这期更细的主要内容是在变量的基础上提高了一点点难度的列表。对我个人而言,我认为列表相较于变量它更灵活,可操作性也更高。

今天的主要学习任务:

  1. 什么是列表
  2. 如何修改,删除,添加列表元素
  3. 组织列表
  4. 操作列表

提示:以下是本篇文章正文内容,下面案例可供参考

一、 什么是列表?

列表能包含一切元素在内

用方括号[] 表示列表,逗号分隔其中的元素

列表的名称通常由复数表示

bicycles = ['永久', '凤凰''捷安特']
print (bicycles)
['永久', '凤凰''捷安特']

在这个例子里,这三个被方括号和单引号区分开的自行车牌子就是这个列表的元素“们”。
由于在一个列表里,里面通常有两个及以上的元素,因此列表的名称通常用复数形式结尾
就像看到的bicycles一样

提示
这里切记要用复数形式作为列表的名,因为在后面的for循环还是提到这里,并且养成使用复数的习惯对于未来编程很重要

注意:

  1. 每一个元素都需要被引号括起来,同时还需要用逗号隔开彼此
  2. 如果此时用了单引号,后续添加新的元素的时候要保持一致,也要用单引号

他会把方括号包括方括号在内的所有元素都打印出来,但由于这不是我们想要让用户看到的输出,我们想要展示给用户看到的是一个一个单独的元素,可以直接print 列表的结果则是带着方括号和单引号的元素“们”,于是我们要学如何访问列表元素

二、如何访问列表元素

对于列表元素的访问有两个主要的指令

1、 列表名称

2、 元素索引 (元素在列表中的顺序,从零开始0、1、2、3…)

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists [0])
print (lists [3])
bmw
suzuki

问题!:
如果我直接访问列表范围外面的元素会是什么效果?
例:lists这个列表只有四个元素,元素索引是从0到3
如果我直接访问元素索引5,会是什么效果?会不会报错?

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists [8])

IndexError                                Traceback (most recent call last)
Cell In[32], line 2
      1 lists = ['bmw', 'benz','audi', 'suzuki']
----> 2 print (lists [8])

IndexError: list index out of range

注意最下面那一行的报错信息:
“list index out of range"
“列表索引超出范围”
就算是访问lists[4] 也不行,因为索引4 也是超出列表范围。
那么在这种情况下,如何快速访问最后一个元素(倒数第一个元素)
一个一个按着元素数是一种方法;还有一种方法可以直接访问倒数第一个元素,那就是将索引指定为 -1
列:

lists = ['bmw', 'benz','audi', 'suzuki']
print(lists[-1])

suzuki

索引-1 指的是倒数第一个元素,那么倒数第二个元素就可以用-2 来指代
按照这个方法以此类推,我们不仅可以快速访问倒数第一个元素
倒数第二个元素也能直接访问 ---- -2
倒数第三个元素 -3

在我们访问列表元素的同时还可以直接改变元素的大小写
这就涉及到下一个点

三、如何修改,删除,添加列表元素

.title() 首字母大写
.upper() 全部大写
.lower() 全部小写
这三个指令的应用

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists [2].title())
Audi
#首字母大写.title() 
#.title() 后面的这个括号在print的时候别忘记添加,加了括号就相当于是给元素提供了一个位置,而给元素提供位置则是输出.title()指令必不可少的
lists = ['bmw', 'BEnz','audi', 'suzuki']
print (lists [2].upper())#全部大写指令,后面的括号同上
print (lists [1].lower())#全部小写指令
AUDI
benz

上面这个例子是三种控制元素输出指令(书写格式)

下面这个例子证明了.title()这类的大小写控制指令都是暂时的,仅仅作用于一次性输出,如果想要让元素输出的时候永久有这个大小写的效果,那就涉及到下一个点–修改列表元素

lists = ['bmw', 'BEnz','audi', 'suzuki']
print (lists [2].upper())
print (lists [1].lower())
print (lists[1])
AUDI
benz
BEnz

可以看到在添加了.lower() 指令之后打印的第二个元素
benz
但是一旦在print命令中不添加.lower()的指令,他的结果又回立即跟列表里的模式保持一致。
BEnz

在这里需要明确一个概念
改变输出结果大致有两种

  1. 暂时性的改变结果,这类改变通常是在print环节添加的不同指令 (类似于女生化妆,早上出门化好妆,一天是美美哒,晚上回家卸了妆,又变成素颜模样)
  2. 永久的改变,这类改变是直接改变列表里元素的模样。从此彻底改头换面了重新做人了。(类似于整容,直接改变模样,直接从源头改变)
lists = ['bmw', 'benz','audi', 'suzuki']
lists [2] = lists[2].title()
print (lists[2])

Audi

在这个例子中,特地把lists[2] 拿出来进行改造!
把它改造成首字母大写的模样。小姑娘也从audi变成了Audi
为了验证audi是否在列表中彻底改变
我们再次打印这个列表

lists = ['bmw', 'benz','audi', 'suzuki']
lists [2] = lists[2].title()
print (lists[2])
print (lists)

Audi
['bmw', 'benz', 'Audi', 'suzuki']

由此可见,果然已经从源头上进行了改变。

通过这个例子,引申出来这一章节的关键信息–修改列表元素
其实修改列表元素的方式又很多,形式也有很多,但是这些都是万变不离其宗
那就是

  1. 找出列表中的哪个元素要改变
  2. 改变成什么样子

刚才举的例子是关于改变首字母大写的
现在这个例子介绍了另一种修改列表元素的形式

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists)

lists [2] = '奥迪'
print (lists)

['bmw', 'benz', 'audi', 'suzuki']
['bmw', 'benz', '奥迪', 'suzuki']

在例子中,lists [2] 本来是 ‘audi’
但是经过这么一改变,‘audi’ 直接变成了 ‘奥迪’

直接从外国人变成了Chinese

在修改列表元素的时候,要注明

  1. 哪个列表(列表名)
  2. 哪个索引(列表名后面加上元素索引)
  3. 怎么修改?(可以加指令修改,也可以直接进行值的修改)
lists [2] = "修改值"
lists [2] = lists [2].title() #加指令修改

除了修改列表元素,同时还能添加列表元素
这里有两个比较主要的指令

  1. .append()
  2. .insert()
lists = ['bmw', 'benz','audi', 'suzuki']
lists.append ('toyota') #在末尾添加元素
lists.insert(2, 'mazda')#可在任意位置添加元素,但是要输入索引
print (lists)

['bmw', 'benz', 'mazda', 'audi', 'suzuki', 'toyota']

在这个例子里,使用.append() 指令可以直接在列表末尾添加元素,这样以来,新添加元素的索引直接变成-1
使用.insert() 指令就比较特殊了,字面翻译来看,insert = 插入
既然是插入的话,就更“自由”,想插哪里,插哪里,但是得提前说明插到哪?
在例子中,lists.insert (2, ‘mazda’) 先是说明了在哪插,后面的mazda表示了插入什么
注意,在插入元素的时候,需要注意在.insert()里,先注明索引,再输入值
列表名.insert( index, ‘元素’)
这是.insert() 的基本用法

注意:
如果在列表里用单引号’元素’
在insert() 里面也要用单引号’元素‘
如果用了双引号,则会报错
问题:
#为什么insert(-1)不是对应列表倒数第一个位置?

lists = ['bmw', 'benz','audi', 'suzuki']
lists.insert(-1, 'mazda')
print (lists [-1])
print (lists)

suzuki
['bmw', 'benz', 'audi', 'mazda', 'suzuki']

可以发现,我是在-1 位置插入的mazda
但是我在访问-1 位置的元素的时候,结果还是suzuki
这是为什么呢?

答:
在.insert() 指令中,先注明的索引指的不是在-1 位置插入值
而是在-1 位置之前插入值
在python语法中,访问列表元素用到的[-1]值得是倒数第一个元素,但是在.insert() 中,(-1)指的是在倒数第一个元素前面添加元素
这个可以在下面这个例子得到更多的体现

lists = ['bmw', 'benz','audi', 'suzuki']
lists.insert(0,'mazda')
print (lists[0])
print (lists)

mazda
['mazda', 'bmw', 'benz', 'audi', 'suzuki']

lists.insert(0, ‘mazda’)
在索引0的位置之前插入值mazda
那么0的位置之前插入的值,还是会出现在0的这个位置

介绍完了修改和添加,接下来就是删除列表元素了
对于列表元素的删除,跟添加类似,有属于它专属的指令
del 语句

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists)
del(lists[0])
print (lists)

['bmw', 'benz', 'audi', 'suzuki']
['benz', 'audi', 'suzuki']

这个del语句不仅可以用于删除列表元素,同时也可以用于很多地方,例如删除字典等,这些东西将会在后期一一解释。
除了del语句,还有使用方法pop()删除元素

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists)
poped_lists= lists.pop()

print (lists)
print (poped_lists)

['bmw', 'benz', 'audi', 'suzuki']
['bmw', 'benz', 'audi']
suzuki

直接使用pop() 指令是针对列表末尾的元素进行删除

并且从列表删除之后可以用新的新的变量名来指代被删除的元素

这种方式可以用于查看末尾元素的时候

根据这个例子可以看出来,.pop() 方法可以直接将列表末尾元素弹出。并且弹出的这个末尾元素还可以继续被使用。只不过末尾弹出的这个元素则使用的是(由于不是被删除,而是从列表中摘出来了,故称之为弹出,另外pop的英文也有弹出的意思——“pop up弹出”)
因为不是被直接删除而是弹出(当然结果就是从原列表中不见了),所以他就还能继续被使用,只不过他需要换个新的名字那就是

poped_lists

这个来做为它的“变量名”

.pop() 的第二种用法
.pop() 可以删除列表中的任意位置的元素
只需要在圆括号里输入该元素的索引即可

lists = ['bmw', 'benz','audi', 'suzuki']
print (lists)
poped_lists = lists.pop()
print (poped_lists)
poped_lists_2 = lists.pop(1)
print (poped_lists_2)

['bmw', 'benz', 'audi', 'suzuki']
suzuki
benz

问题:
del 和pop都能删除,那我用哪个呢?

用哪个删除方法都可以,总归的目的是把元素从列表中删除,但是!如果你还想后续继续使用这个被删除的元素,那你就用pop,如果后续不用这个元素了,你想要彻底删除这个元素,那就用del
我当时就在这里弄混好几次pop的指令,所以我这次直接做了一个总结,关于del 怎么用(del 列表名[索引]),pop怎么用(有两种方式)一种是括号里不加索引—直接删除末尾元素,一种是括号里加索引,删除指定元素。

lists = ['bmw', 'benz','audi', 'suzuki']
del lists[2] #delete 'audi'
print (lists) #in this lists, no audi
poped_list = lists.pop(1) #delete'benz'
print (poped_list)
print (lists)
poped_2 = lists.pop()
print (poped_2)
print (lists)

['bmw', 'benz', 'suzuki']
benz
['bmw', 'suzuki']
suzuki
['bmw']

除了del 和.pop() 还有一种删除方法,直接根据元素的值去删除,而不是根据他的索引
.remove()
在我们知道元素的值,却不知道其索引的时候,可以根据.remove()去删除列表元素。

lists = ['bmw', 'benz','audi', 'suzuki']
lists.remove ('audi')
print (lists)

['bmw', 'benz', 'suzuki']

使用.remove()指令删除元素之后,不仅可以实现从列表中删除元素的目的,同时还能继续使用这个被删除的值

lists = ['bmw', 'benz','audi', 'suzuki']
removed_brand = ('benz')
lists.remove('benz')

print (removed_brand)

benz

个人的理解:
在我学到这里的时候,我犯过一个错误
错误示范🙅!仅供参考!

lists = ['bmw', 'benz','audi', 'suzuki']
removed_brand = lists.remove('benz')
#removed_brand 作为这个被删除值的变量名
#lists.remove('benz')是直接删除该元素的指令
print (removed_brand)

None #结果为空

通过这个错误示范,可以简单理解python的运行逻辑
前面给了一个名字,后面跟的值却是删除元素的指令,所以就算把这个名字打印出来,他的结果也是空的,因为在这之前,系统早已经把这个指令运行了,所以结果自然而言是空的

那.remove() 指令可以继续使用被删除的值, 靠的是它在执行删除指令之前的一个变量赋值

lists = ['bmw', 'benz','audi', 'suzuki']
removed_brand = ('benz')#变量赋值
lists.remove('benz')

print (revomed_brand)
print (lists)

benz
['bmw', 'audi', 'suzuki']

所以我个人对于这里的看法是
removed_brand = (‘benz’)
这里面的值 ‘benz’ 是把列表里的值 ‘benz’ 重新额外定义一个变量名。所以就算是把 ‘benz’ 从列表中remove 掉,也可以根据给他定义的新变量名继续使用

四、组织列表

组织列表可以根据根据不同的需求去调整列表中元素的位置
列表排序涉及到一个永久和临时。

永久顾名思义就是自打用了这个排序指令,这个列表的排序就永远改变了

临时顾名思义就是临时排序,用了这个指令,就会在这个指令下面输出排序效果,一旦指令结束,列表排序就又回到了原始排序

sort() 对列表永久排序
列表名.sort() 会自动排列列表中的元素,会按照从小到大的顺序排列,或者是开头字母从A-Z的顺序

在使用.sort()的时候,可以添加

列表名.sort(reverse=True) 实现倒序,从大到小,从Z- A的顺序

lists = ['bmw', 'benz','audi', 'suzuki']
lists.sort() #正序
print(lists)
lists.sort(reverse=True)#倒序
print(lists)


['audi', 'benz', 'bmw', 'suzuki']
['suzuki', 'bmw', 'benz', 'audi']

#刚刚是字母的排序,试一试数字的排序
list = ['1','5','2','4','7']
list.sort()
print (list)
list.sort(reverse= True)
print (list)

['1', '2', '4', '5', '7']
['7', '5', '4', '2', '1']

注意!
这里讲的所有排列方式都是按元素为小写,如果是大小写混在一起的话,列表排列就会复杂很多
例子:

lists = ['A','b','C','d']
lists.sort()
print (lists)

['A', 'C', 'b', 'd']

使用函数sorted()对列表临时排序

要保留列表元素旧的排序,同时又得以特定的顺序呈现可以使用sorted()

函数 sorted(元素名) 可以实现元素按特定的排序呈现,但又不会影响他们在列表中的旧的排序

说白了就是 sorted(列表名)有点像一个特殊变量,只有sorted(名)的列表才会这么排列。

它的排列效果跟.sort() 效果类似,从小到大,从A-Z

lists = ['bmw', 'benz','audi', 'suzuki']
print (sorted(lists))
print (sorted(lists, reverse=True))
print (lists)

['audi', 'benz', 'bmw', 'suzuki']
['suzuki', 'bmw', 'benz', 'audi']
['bmw', 'benz', 'audi', 'suzuki']

由此可见,sorted() 函数是临时排序,在这个指令循环周期结束之后,列表的排序还是回到了原来的样子。

如果我想让这个列表排序从头到尾反过来,不按照字母顺序或者数字顺序,单纯的让这个列表顺序直接反转可以用
.reverse() 指令
.reverse() 是永久性的改变列表顺序,如果想要它从反转顺序回到原始顺序,可以再次.reverse() 一下

lists = ['bmw', 'benz','audi', 'suzuki']

lists.reverse() 
print (lists)

['suzuki', 'audi', 'benz', 'bmw']

lists.reverse() 
print (lists)

['bmw', 'benz', 'audi', 'suzuki']

确定列表的长度
设想一下,当你处理一个一眼望不到头的列表的时候,你想确认一下这个列表有多长?这该怎么办呢?当然不是一个一个数。
而是使用len() 函数
这里的列表长度指的是有多少个元素
列:

lists = ['bmw', 'benz','audi', 'suzuki']
len(lists)
print(len(lists))

4

这里的结果显示是4,也就意味着列表里只有4个元素,因此这个列表的长度就是4
显而易见,这跟我们之前聊到的访问列表元素有所不同,在访问列表的时候,我们输入的元素索引是从0开始的,但是这里的len() 函数查看列表长度则是从1开始的。

问题
我在visual上需要输入print() 才会出现结果
但是我在IDLE中直接输入len() 函数就能直接出结果
在这里插入图片描述
在这里插入图片描述
对于这个问题,我一开始也是很纳闷,在我自己找不到答案之后,询问的Chat GPT
下面是他的答案
请添加图片描述

结语

在这一章节中,我们学习了“列表”,并了解了关于列表的基本信息和简单的列表编辑方式,例如“添加”、“修改”、“删除” 元素,亦或者是列表的排序,不论是以字母顺序或者数字顺序,又或者是单纯的反转列表顺序。
由于马上到期中了,哥们手里的学业压力明显上来了,可能后几篇要稍微拖一拖。毕竟本着质量第一,速度第二的原则,还是要对学的每一个知识都有深刻的思考,比如前面提到的为什么在IDLE中,输入len() 函数可以直接获得结果,但是在编译器中还得需要额外输入print()指令。
我不自诩是一个很有天赋的编程天才,但是我对于coding的兴趣是很浓的!可能这也是我为什么会选择自学这个的原因吧。

另外还有一件事就是在我还没接触到CSDN这个网站之前,我一直是在Github上找答案,甚至都没有想到用GPT(主要是没想到。。。)但是我在Github的经历让我不太满意,当时我注意到.insert(-1,元素名) 插入的位置不是列表最后一个的时候,我在Github里面发评论问。哥们不但没有等到答案,反倒是收获了不少怼我的。。。。。
经历过这件事之后,我开始注意到很多自学编程的新手遇到问题找不到答案,一来二去,自己也开始麻木了,书上怎么教的,自己就怎么学,遇到问题也不去深思了。
索性我就开始发帖子,这里就当作是新手朋友问问题的地方吧,也不用担心问的问题会被别人嘲笑太简单之类的。铁子切记!学到的才是自己的。

等下次整理完了再发,这周就先继续弄论文了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BartLearnCoding

收入将助力山区孩子学习编程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值