文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python 列表(List)

2023-01-30 21:57

关注

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。可以进行的操作包括索引,切片,加,乘,检查成员。


切片

举个例子:

有一堆明星列表,我需要取第一个

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names[0])

执行输出 chenglong

那么这个0,是代表什么呢?

0代表,chenlong在这个列表中,从左到右开始,第一个的位置。在数据存储中,不是从1开始算,而是从0开始计算。

为什么从0开始呢?因为二进制就是从0开始的。


如果要取中间2个呢?

print(names[1:3])

执行输出:

['fanbingbing', 'zhaowei']

语法: 

[起始位置:结束位置]

结果输出,不包括结束位置。通俗来讲,就是顾头不顾尾

这个方法,可以取一连串的数据。

这个动作,叫做切片


取最后2个

我们不能写-2:-0  0是可以省略的,写成-2: 即可


print(names[-2:])

执行输出

['zhaowei', 'lilianjie']


取前3个

可以写出0:3 由于0可以省略,所以:3 表示前3个

print(names[:3])

执行输出

['chenlong', 'fanbingbing', 'zhaowei']


每隔2个切一个

print(names[0:-1:2])

也可以写成

print(names[::2])

执行输出

['chenlong', 'zhaowei']


第3个参数,是间隔的意思。起始索引 0,输出chenlong。 0,1,2...  间隔2个,索引为2,输出zhaowei



增加

现在需要增加一个人leijun,需要使用append()方法

append是追加的意思,插入到最后一个元素

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.append("leijun")
print(names)

执行输出

['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie', 'leijun']


插入

增加一个人mayun,必须在fanbingbing的前面,需要使用insert()方法

语法: insert(索引,值)

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.append("leijun")
names.insert(1,"mayun")
print(names)

fanbingbing的索引为1

执行输出

['chenlong', 'mayun', 'fanbingbing', 'zhaowei', 'lilianjie', 'leijun']


修改

现在需要把fanbingbing改成libingbing

直接取出元素,赋值即可

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names[1] = "libingbing"
print(names)

执行输出

['chenlong', 'libingbing', 'zhaowei', 'lilianjie']


删除

需要把chenlong删除

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.remove("chenlong")
print(names)

执行输出

['fanbingbing', 'zhaowei', 'lilianjie']


还有一种方法方法,也可以删除

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
del names[0]
print(names)


最后,还有一种方法,也可以删除

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.pop(0)
print(names)

pop() 里面,可以接一个索引。用来删除指定的元素

默认不带参数,是删除最后一个元素


查询

查询指定元素的索引

比如列表元素,比较多。一个个数,比较累。可以使用index()方法

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names.index("zhaowei"))

执行输出 2


有了元素的索引,就可以输出元素的值了。

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names[names.index("zhaowei")])

执行输出zhaowei


统计

统计lilianjie有多少个

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names.count("lilianjie"))

执行输出 1


清空

clear()方法会清空所有元素

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.clear()
print(names)

执行输出 []


反转

reverse() 会将元素的索引重新排列,从右向左颠倒

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.reverse()
print(names)

执行输出

['lilianjie', 'zhaowei', 'fanbingbing', 'chenlong']


排序

sort() 默认是升序

字母,安装字母顺序排序

数字,从大到小排序

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.sort()
print(names)

执行输出

['chenlong', 'fanbingbing', 'lilianjie', 'zhaowei']


如果是数字、字母、符号混合呢?

names = ["3chenlong","!fanbingbing","Zhaowei","lilianjie"]
names.sort()
print(names)

执行输出

['!fanbingbing', '3chenlong', 'Zhaowei', 'lilianjie']

那么优先级就是 符号、数字、字母大写、字母小写

这个排序规则,是安装ASCII码排序规则来的。


复制

复制整个列表

names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names2 = names.copy()
print(names)
print(names2)

执行输出

['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie']

['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie']


复制列表中带列表的数据

names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
names2 = names.copy()
#修改列表中的第1个列表中的元素
names[1][0] = "Angelababy"
print(names)
print(names2)

执行输出

['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

为什么结果是一样的呢?明明只改了names,为什么names2也是一样的?
因为copy()是浅copy。它只会拷贝第一层,列表中包含列表,这个就属于第二层。为什么没拷贝呢?它是由内存存储方式决定的。一个列表,是一个内存指针(地址),copy的时候,只拷贝了内存地址。那么当内存地址的内容发生变化时,读取指针的时候,也会读取更新的内容。


实现浅copy,还有3种方式

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import copy

names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
names2 = copy.copy(names)
names2 = names[:]
names2 = list(names)

第一种方式,用了copy模块

第二种方式,遍历了列表

第三种方式,用赋值的方式。


浅copy貌似没啥用,但是在创建联合账号的时候,就会用到,举个例子:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

#共同银行账户,有100万
person = ["name",["money",100]]
#丈夫和妻子共同持有
husband = person[:]
wife = person[:]
#声明丈夫和妻子的名字
husband[0] = "huangxiaoming"
wife[0] = "Angelababy"
#丈夫花了50万,卡里还剩50万
husband[1][1] = 50
#查询账户余额
print(husband)
print(wife)

执行输出

['huangxiaoming', ['money', 50]]

['Angelababy', ['money', 50]]


如果想要深copy呢?需要用到一个模块copy

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import copy

names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
#deepcopy 深copy
names2 = copy.deepcopy(names)
names[1][0] = "Angelababy"
print(names)
print(names2)

执行输出

['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

['chenlong', ['angelababy', 'yangyin'], 'zhaowei', 'lilianjie']


遍历

遍历列表中的每一个元素,需要用到for循环

names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
for i in names:
   print(i)

执行输出

chenlong

['angelababy', 'yangyin']

zhaowei

lilianjie


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯