专栏首页洁癖是一只狗如何理解和使用Python中的列表

如何理解和使用Python中的列表

今天我们详细讲解Python 中的列表。

前言 序列(sequence)

  • 序列是Python中最基本的一种数据结构 数据结构指计算机中数据存储的方式
  • 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引) 并且序列中的数据会按照添加的顺序来分配索引
  • 序列的分类: 可变序列(序列中的元素可以改变): > 列表(list) 不可变序列(序列中的元素不能改变): > 字符串(str) > 元组(tuple)

Python有6个序列的内置类型,但最常见的是列表和元组。今天我们就来讲讲列表。

列表简介(list)

列表是Python中内置有序可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、字典以及其他自定义类型的对象。

列表的使用:

1. 列表的创建

2. 操作列表中的数据

列表中的对象都会按照插入的顺序存储到列表中,第一个插入的对象保存到第一个位置,第二个保存到第二个位置。我们可以通过索引(index)来获取列表中的元素。索引是元素在列表中的位置,列表中的每一个元素都有一个索引。索引是从0开始的整数,列表第一个位置索引为0,第二个位置索引为1,第三个位置索引为2,以此类推。

下面我们详细讲解有关列表的操作。

1. 创建列表

1). 创建列表,通过[]来创建列表

my_list = []
print(my_list,type(my_list))

运行结果:

2). 创建一个包含有5个元素的列表

当向列表中添加多个元素时,多个元素之间使用,隔开

my_list = [,,,,]

3). 获取列表中的第1,3 5 个元素

my_list = [10,20,30,40,50]
print(my_list[0], my_list[2], my_list[4])

运行结果:

4). 通过len()函数获取列表的长度,也就是列表中元素的个数。

my_list = [10,20,30,40,50]
print(my_list[0], my_list[2], my_list[4])
print(f'my_list\'s length is {len(my_list)}')

运行结果:

2. 列表切片读取列表内容(切片指从现有列表中,获取一个子列表)

通过切片来获取指定的元素

语法:列表[起始:结束]

通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素

做切片操作时,总会返回一个新的列表,不会影响原来的列表

起始和结束位置的索引都可以省略不写

如果省略结束位置,则会一直截取到最后

如果省略起始位置,则会从第一个元素开始截取

如果起始位置和结束位置全部省略,则相当于创建了一个列表的副本

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank']
print(employees[:])  #运行结果:['Jack', 'Kevin', 'Ray', 'Bin', 'Eva', 'Summer', 'Frank']
print(employees[:])  #运行结果:['Yuki', 'Jack', 'Kevin', 'Ray']
print(employees[:])  #运行结果:['Yuki', 'Jack', 'Kevin', 'Ray', 'Bin', 'Eva', 'Summer', 'Frank']
print(employees[:])  #运行结果:['Jack', 'Kevin'] 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素

运行结果:

语法:列表[起始:结束:步长]

步长表示,每次获取元素的间隔,默认值是1

步长不能是0,但是可以是负数

如果是负数,则会从列表的后部向前边取元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank']
print(employees[::])  #运行结果:['Yuki', 'Kevin', 'Bin']
print(employees[::-1])  #相当于将整个列表翻转显示。运行结果['Frank', 'Summer', 'Eva', 'Bin', 'Ray', 'Kevin', 'Jack', 'Yuki']
print(employees[::-2]) #运行结果:['Frank', 'Eva', 'Ray', 'Jack']

运行结果:

补充:

列表的索引可以是负数。如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个以此类推。

3. 列表的通用操作

  • +可以将两个列表拼接为一个列表
my_list = [1,2,3] + [4,5,6]
print(my_list)

运行结果:

  • * 可以将列表重复指定的次数
my_list = [1,2,3] * 5
print(my_list)

运行结果:

  • in 和 not in

in用来检查指定元素是否存在于列表中

如果存在,返回True,否则返回False

not in用来检查指定元素是否不在列表中

如果不在,返回True,否则返回False

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank']
print('Yuki' in employees)  #True
print('Cendy' not in employees)  ##True
  • len()获取列表中的元素的个数

min() 获取列表中的最小值

max() 获取列表中的最大值

arr = [,,,,,]
print(min(arr) , max(arr))

运行结果:

两个方法(method)index() 和 count()

方法和函数基本上是一样,只不过方法必须通过对象.方法() 的形式调用

s.index() 获取指定元素在列表中的第一次出现时的索引

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank']
print(employees.index('Jack'))

运行结果:

index()的第二个参数,表示查找的起始位置,第三个参数,表示查找的结束位置

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print(employees.index('Jack'))
print(employees.index('Jack',2))

运行结果:

s.count() 统计指定元素在列表中出现的次数

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print(employees.count('Jack')) #'Jack'在employees列表中出现了两次

运行结果:

4. 修改列表中的元素

方法一:直接通过索引来修改元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees[0] = 'Mary'
employees[1] = 'Bunpoat'
print('修改后:',employees)

运行结果:

方法二:通过del来删除元素

del employees[1] 删除索引为1的元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
del employees[]

运行结果:

方法三:通过切片来修改列表

在给切片进行赋值时,只能使用序列

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees[0:2] = ['Mary','Bunpoat'] #修改employees[0]为Mary,employees[1]为Bunpoat
print('修改后:',employees)
employees[0:0] = ['Yuki'] ##向索引为0的位置插入元素'Yuki'
print('修改后:',employees)

运行结果:

方法四:通过切片来删除元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
del employees[:]  #删除employees[0] 和 employees[1]
print('修改后:',employees)

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
del employees[::]
print('修改后:',employees)

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees[:] = []
print('修改后:',employees)

运行结果:

注意:以上操作,只适用于可变序列

5. 列表的方法

  • append()

向列表的最后添加一个元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.append('Mary')
print('修改后:',employees)

运行结果:

  • insert()

向列表的指定位置插入一个元素

参数:

1.要插入的位置

2.要插入的元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.insert(,'Mary')
print('修改后:',employees)

运行结果:

  • extend()

使用新的序列来扩展当前序列

需要一个序列作为参数,它会将该序列中的元素添加到当前列表中

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.extend(['Mary','Bunpoat'])
#或是employees += ['Mary','Bunpoat'] 可以达到一样的效果
print('修改后:',employees)

运行结果:

  • clear()

清空序列

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.clear()
print('修改后:',employees)

运行结果:

  • pop()

根据索引删除并返回被删除的元素

#删除指定索引的元素
employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.pop(2)  #删除索引为2的元素
print('修改后:',employees)

#删除最后一个元素
employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.pop()  #删除最后一个元素
print('修改后:',employees)

运行结果:

  • remove()

删除指定值的元素,如果相同值得元素有多个,只会删除第一个

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.remove('Yuki')
print('修改后:',employees)
employees.remove('Jack')
print('修改后:',employees)

运行结果:

  • reverse()

用来反转列表

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
print('修改前:',employees)
employees.reverse() 
print('修改后:',employees)

运行结果:

  • sort()

用来对列表中的元素进行排序,默认是升序排列

如果需要降序排列,则需要传递一个reverse=True作为参数

my_list = list('asnbdnbasdabd')
print('修改前',my_list)
my_list.sort() ##升序排序
print('修改后',my_list)

my_list = list('asnbdnbasdabd')
print('修改前',my_list)
my_list.sort(reverse=True)  ##降序排序
print('修改后',my_list)

运行结果:

6. 遍历列表

遍历列表,指的就是将列表中的所有元素取出来

方法一:通过while循环来遍历列表

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
i = 
while i < len(employees) :
    print(employees[i])
    i += 

运行结果:

方法二:通过for循环来遍历列表

for循环的代码块会执行多次,序列中有几个元素就会执行几次

每执行一次就会将序列中的一个元素赋值给变量,

所以我们可以通过变量,来获取列表中的元素

employees  = ['Yuki','Jack','Kevin','Ray','Bin','Eva','Summer','Frank','Jack']
for i in employees :
    print(i)

运行结果:

今天我们先介绍到这里。

本文分享自微信公众号 - 洁癖是一只狗(rookie-dog),作者:小土豆Yuki

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql基础篇--面试如何定位低效率sql语句

    当面对一个sql性能问题,我们应该从何处入手使得尽快定位问题sql,我们从基础的命令开始

    小土豆Yuki
  • 并发编程如何使用锁保护多个资源

    上一篇我们知道受保护资源和锁之间合理的关联关系应该是N:1的关系,也就是说一个锁可以保护多个资源,并不能多把锁来保护一个资源,今天我们就说说如何实现一把锁保护多...

    小土豆Yuki
  • Redis持久化RDB详解

    RDB 是Redis默认采用的持久化方式,RDB方式是通过快照完成的,当符合一定条件将自动将内部存的数据进行快照并持久化到磁盘。

    小土豆Yuki
  • 一份走心的iOS开发规范前言约定(一)命名规范(二)编码规范2.14 内存管理规范本文参考文章其他有价值的文章

    VV木公子
  • 让两个线程安全的交换对象 顶

    JDK中有一个Exchanger交换类可以让两个线程的对象安全互换,注意这里是互换,而不是谁传给谁。这是一个传递字符数组的互换。

    算法之名
  • 多线程中的锁系统(一)-基础用法

    蘑菇先生
  • 7篇ICLR论文,遍览联邦学习最新研究进展

    2020 年的 ICLR 会议原计划于4 月 26 日至 4 月 30 日在埃塞俄比亚首都亚的斯亚贝巴举行,这本是首次在非洲举办的顶级人工智能国际会议,但受到疫...

    机器之心
  • [分享]解决Ubuntu 16.04安装Vitis 2019.2失败的问题

    检查硬盘大小,系统盘还有168G,安装目录/opt/Xilinx还有587G,都有足够大小。

    hankfu
  • 多个单词的命名规范有哪些优缺点?

    嘿嘿~我写这篇文章主要还是想向大家请教的,我们今天聊三个最常用的吧:横杠 - 连接、下划线 _ 连接、驼峰。

    benny
  • Go微服务 - 构建我们的第一个服务

    虽然通过HTTP提供JSON服务不是内部服务和外部服务的唯一选择,但本文聚焦的是HTTP和JSON. 使用RPC机制和二进制消息格式(例如Protocol Bu...

    李海彬

扫码关注云+社区

领取腾讯云代金券