[Python学习日记-15] 细讲数据类型——列表

[Python学习日记-15] 细讲数据类型——列表

简介

列表的增删改查

列表切片(核心)

列表的排序和反转

列表的循环

简介

        在[Python学习日记-7] 初识基本数据类型(下)中我们简单介绍了 Python 中的数据类型——列表,而在本篇中我们将展开介绍这一种数据类型。在这里我们简单回顾一下什么是列表。

定义:[] 内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素

列表的特点

1.可存放多个值

2.Python 中的列表是一种有序的,按照从左到右的顺序定义列表元素,下标从0开始顺序访问

3.Python 中的列表是一种可变的,可修改指定索引位置对应的值

4.Python 中的列表几乎可以无限大,这取决于计算机的内存

列表的增删改查

一、增

1、追加,数据会追加到尾部

names = ['Jove','Kerry']
names.append("rain")
names.append("eva")
print(names)

 2、插入,可插入任何位置

names = ['Jove','Kerry','rain','eva']
names.insert(2,"小猪佩奇")
print(names)

3、合并,可以把另一外列表的值合并进来

names = ['Jove', 'Kerry', '小猪佩奇', 'rain', 'eva']
n2 = ["张三","李四","狗蛋"]
names.extend(n2)
print(names)

4、列表嵌套

names = ['Jove', 'Kerry', '小猪佩奇', 'rain', 'eva', '张三', '李四', '狗蛋']
names.insert(2,[1,2,3])
print(names)
print(names[2][1])    # 读取嵌套的列表

二、删

1、del 直接删

names = ['Jove', 'Kerry', [1, 2, 3], '小猪佩奇', 'rain', 'eva', '张三', '李四', '狗蛋']
del names[2]
print(names)

 

2、pop 删

names = ['Jove', 'Kerry', '小猪佩奇', 'rain', 'eva', '张三', '李四', '狗蛋']
names.pop()    # 默认删除最后一个元素并返回被删除的值
print(names)
names.pop(1)    # 删除指定元素
print(names)
help(names.pop)    # 显示帮助

注意:pop() 在列表为空时会报错

3、clear 清空

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四']
n2 = ['张三', '李四', '狗蛋']
n2.clear()
print(n2)

4、remove 删除从左到右找到的第一个元素

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四','eva']
names.remove("eva")
print(names)

        注意:若要删除的值不存在则会报错

三、改

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四']
names[0] = "Kerry"
names[-1] = "李五"
print(names)

四、查

1、使用列表的方法查询 

names = ['Kerry', '小猪佩奇', 'rain', 'eva', '张三', '李五']
names.index("eva")    # 返回从左开始匹配到的第一个 eva 的索引
names.count("eva")    # 返回列表中 eva 的个数

注意:index() 如果查找的元素不存在于列表当中,会报错说列表中不存在该元素;而 count() 没有找到将不会报错,而是显示0

2、直接查

"eva" in names

3、把列表全取出来

print(names[:])    # 相当于 names[0:]

 

列表切片(核心)

        切片就像切面包,可以同时取出元素的多个值

names[start:end]

1、正着切 

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四','eva']
print(names[1:4])    # 不包含序号为4的元素
print(names[1:-2])
print(names[1:])    # 把最后的都取出来
print(names[:4])    # 左边不写代表从0开始

 注意:切片的特性是顾头不顾尾,即 start 的元素会被包含,end-1 是实际取出来的值(end 的元素不会被包含)

2、倒着切

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四','eva']
print(names[-5:-1])

        可以看到这里面只打印了4个,其实想要的是后面5个,而“eva”这个值并没有打印出来,这是因为前面提到的列表特性,顾头不顾尾 ,可是想把后5个全取出来如何做呢? 

print(names[-5:])    # 只需要不输入结尾的序号就可以直接取出后5位了

 

3、步长

        步长字面意思就是步子的长度,在列表当中也是如此,只不过默认的步长是1,所以切片的时候是一个个切的,我们通过步长的设置可以实现两个两个切、三个三个切...这样跳着切

names[start:end:step]        # step 默认值是1

print(names[0:-1:1])    # 设置步长为1
print(names[0:-1:2])    # 设置步长为2,这样会跳一个打印一个
print(names[0:-1:3])    # 设置步长为3
print(names[::3])    # 整个列表加步长3

        在第2点倒着切的时候总有一个想法,为什么不能从右往左切呢,非要写出 [-5:-1] 这种很难让人看得明白的东西呢?在这里借助步长的设置我们可以实现从右往左切

names = ['Jove', '小猪佩奇', 'rain', 'eva', '张三', '李四','eva']
names[::-1]    # 会发现列表都倒序了
names[-1:-5:-1]    # 在倒序的基础上就可以从右往左切了

列表的排序和反转

一、排序

a = [83,4,2,4,6,19,33,21]
a.sort()
print(a)

        上面的是数字很好理解,那如果列表中的是字符呢?

names = ['Jove', '小猪佩奇', 'rain','@', 'eva', '张三', '4','#','李四','eva']
names.sort()
print(names)

         这个结果似乎出乎了我们的意料之外,那我们应该如何解释呢?答案全在下面这张表上,这张表是ASCII码表,而字符的排序优化级规则是按这张表来的

 注意:使用 sort() 排序时列表中元素的变量类型需要是一致的,换句话说就是数字和字符串不能一起排序,这样会报错(Python3不可以,而Python2却可以)

二、反转

         聪明的同学从上面提到步长从右往左切的时候其实就已经想到,其实步长为-1时列表就已经是反转的了,而列表当中还有专门的反转方法 reverse()

names = ['Jove', '小猪佩奇', 'rain','@', 'eva', '张三', '4','#','李四','eva']
names.reverse()
print(names)

        可以看得出 reverse() 是直接把列表反转了并覆盖了原来的,当然使用步长来实现这一个效果只需要多加几步就可以了,看看这个实现代码

names = ['Jove', '小猪佩奇', 'rain','@', 'eva', '张三', '4','#','李四','eva']
names_reverse = names[::-1]
print(names_reverse)
names = names_reverse
print(names)

        当然步长的作用还远远不止于此,它还可以让字符串反转,具体如何实现在后面细讲字符串时再来讲述

n = "Jove"
print(n[::-1])

列表的循环

for i in names:    # i 是 for 循环中的变量,for 循环结束后 i 就会 del 掉,i 会取一个 names 中的值,若值在列表 names 中则为 True,最终会达到循环了整个列表
    print(i)

 

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JoveZou

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值