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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值