前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 列表(List)

python 列表(List)

作者头像
py3study
发布2018-08-02 16:03:46
9700
发布2018-08-02 16:03:46
举报
文章被收录于专栏:python3python3

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

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

切片

举个例子:

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names[0])

执行输出 chenglong

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

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

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

如果要取中间2个呢?

代码语言:javascript
复制
print(names[1:3])

执行输出:

['fanbingbing', 'zhaowei']

语法: 

代码语言:javascript
复制
[起始位置:结束位置]

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

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

这个动作,叫做切片

取最后2个

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

代码语言:javascript
复制
print(names[-2:])

执行输出

['zhaowei', 'lilianjie']

取前3个

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

代码语言:javascript
复制
print(names[:3])

执行输出

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

每隔2个切一个

代码语言:javascript
复制
print(names[0:-1:2])

也可以写成

代码语言:javascript
复制
print(names[::2])

执行输出

['chenlong', 'zhaowei']

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

增加

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

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.append("leijun")
print(names)

执行输出

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

插入

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

语法: insert(索引,值)

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.append("leijun")
names.insert(1,"mayun")
print(names)

fanbingbing的索引为1

执行输出

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

修改

现在需要把fanbingbing改成libingbing

直接取出元素,赋值即可

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names[1] = "libingbing"
print(names)

执行输出

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

删除

需要把chenlong删除

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.remove("chenlong")
print(names)

执行输出

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

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
del names[0]
print(names)

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.pop(0)
print(names)

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

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

查询

查询指定元素的索引

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names.index("zhaowei"))

执行输出 2

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names[names.index("zhaowei")])

执行输出zhaowei

统计

统计lilianjie有多少个

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
print(names.count("lilianjie"))

执行输出 1

清空

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.clear()
print(names)

执行输出 []

反转

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

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.reverse()
print(names)

执行输出

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

排序

sort() 默认是升序

字母,安装字母顺序排序

数字,从大到小排序

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names.sort()
print(names)

执行输出

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

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

代码语言:javascript
复制
names = ["3chenlong","!fanbingbing","Zhaowei","lilianjie"]
names.sort()
print(names)

执行输出

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

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

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

复制

复制整个列表

代码语言:javascript
复制
names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
names2 = names.copy()
print(names)
print(names2)

执行输出

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

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

复制列表中带列表的数据

代码语言:javascript
复制
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种方式

代码语言:javascript
复制
#!/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貌似没啥用,但是在创建联合账号的时候,就会用到,举个例子:

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
#!/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循环

代码语言:javascript
复制
names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
for i in names:
    print(i)

执行输出

chenlong

['angelababy', 'yangyin']

zhaowei

lilianjie

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档