python 列表(List)
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