热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.列表的定义及增删改查

一、列表 列表由一系列按特定顺序排列的元素组成。我们可以创建包含字母表中所有字母、数字0~9,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。 鉴于列表通常包含多个元素,所以给列表指

一、列表

列表由一系列按特定顺序排列的元素组成。我们可以创建包含字母表中所有字母、数字0~9,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系

鉴于列表通常包含多个元素,所以给列表指定一个表示复数的名称(如:names)是一个不错的主意

python中,用方括号[]来表示列表,并用逗号来分隔其中的元素

若是直接打印列表,Python会打印列表的内部表示,包括方括号

二、定义列表

我们创建的大多数列表都将是动态的,这意味着在列表创建之后,将随着程序的运行增删元素

例如:你创建一个游戏,要求玩家射杀小怪兽;为此,可在开始时将一些小怪兽存储在列表中,然后每当有小怪兽被消灭时,都将其从列表中删除,而每次有新的小怪兽出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,小怪兽列表的长度将不断变化。

1.[]中括号

用中括号括起一堆数据即可,数据之间用逗号隔开

lis = [1,2,3,4,5]

(1)创建空列表

不知道要向列表中添加什么数据,也可创建一个空列表。

empty = []

(2)列表中嵌套列表

lis1 = [1,'思齐',155.520,[1,2,2] ]

可以看到上面这个列表包含有: 整型、字符串、浮点型数据、子列表。

2.list()方法

list()方法用于把一个可迭代对象转换为列表

list(iterable)
'''
    功能: 把一个可迭代对象转换为列表.
    
    参数: 
        ① iterable: 可迭代对象。
    
    返回值: 列表。
'''

(1)创建空列表

empty = list()
empty

(2)将字符串中的每个字符迭代存放进列表

a = list('Hero') 
a

(3)将元组中的每个元素迭代存放进列表

b = list( (1,2,3,4,5) )
b

(4)与range()结合生成数字列表

numbers = list(range(1,6))
numbers

三、列表的访问

可以通过元素的索引值(index)从列表中获取单个元素

1.访问列表元素

列表是有序集合,因此想要访问列表的任意元素,只需将该元素的位置或索引告诉Python即可

要访问列表元素,可指出列表的名称,再指出元素的索引,并将其放在方括号内

(1)示例

① 例1
fruits = ['葡萄','草莓','大鸭梨','菠萝']
print(fruits[2])
'大鸭梨'

当我们请求获取列表元素时,Python只返回该元素,而不包括方括号和引号。

此外,还可以对任何列表元素调用一些方法,如title()、uper()等

2.索引

列表索引值从 0 开始。

Python中,凡是顺序索引第一个列表元素的索引为0,而不是1。在大多数编程语言中都是如此,这与列表操作的底层实现相关。因为计算机本身是二进制的,在二进制世界里只有两个数:0 、1,0也就是二进制中第一个数,秉承这个传统,0也就用于表示第一个数。

如果结果出乎意料,请看看你是否犯了简单的差一错误

第二个列表元素的索引为1。依此类推,要访问列表的任何元素,都可将其位置减1,并将结果作为索引(index)

(1)索引为负值

Python为访问最后一个列表元素提供了一种特殊语法。通过将索引指定为-1,可让Python返回最后一个列表元素

这种语法很有用,因为我们经常需要在不知道列表长度的情况访问最后的元素

这种约定也适用于其他负数索引,例如:索引-2返回倒数第二个列表元素,素引-3返回倒数第三个列表元素,以此类推。

① 示例
fruits = ['葡萄','草莓','大鸭梨','菠萝']
fruits[-1]
'菠萝'

3.使用列表中的各个值

可像使用其他变量一样使用列表中的各个值。例如,你可以使用拼接根据列表中的值来创建消息。

animals = ["rabbit","dog","panda","cat"] 
# 使用animals[2]的值生成一个句子,并将其存储在变量message中
message = "My favorite animal is the " + animals[2] + "."   
print(message)
My favorite animal is the panda.

四、修改列表元素

1.修改

修改列表元素的语法和访问列表元素的语法相似。

通过指定列表名和要修改元素的索引值(index)从列表中获取单个元素,再映射1个新值。

fruit = ['葡萄','草莓','大鸭梨','菠萝']
fruit[2] = '大西瓜'
fruit
# ['葡萄', '草莓', '大西瓜', '菠萝']

五、添加

1.append(): 末尾单一元素添加

列表名.append( 想要添加的元素 )

'''
    功能: 向列表中添加元素,**每次只能加一个元素,并且是往列表的末尾添加数据**
        (也可理解为追加、排队增加)。
          Append object to the end of the list.
    
    参数: 想要添加的元素。
    
    返回值: 添加完成后的列表。
'''
① 追加1个元素
num = [1,2,3,4,5]
num.append(6)
num
# 会发现参数 6 被添加到列表的末尾。
② 追加多个元素(可迭代对象)

若是我们直接添加多个元素,Python会向我们报错TypeError: append() takes exactly one argument (2 given),也就是说append()方法1次只能添加一个参数,那么如果我们就想添加多个元素该如何操作?

用可迭代对象进行添加多个元素

Ⅰ.元组
nums = [1,2,3,4,5,6]
nums.append( (7,8) )
print(nums)
'''
    [1, 2, 3, 4, 5, 6, (7, 8)]
'''
Ⅱ.列表
nums = [1,2,3,4,5]
nums.append(["思齊","永远18岁"])
print(nums)
'''
    [1, 2, 3, 4, 5, ['思齊', '永远18岁']]
'''
Ⅲ.字典
nums = [1,2,3,4,5]
nums.append({"姓名":"思齊","年龄":"永远18岁"})
print(nums)
'''
    [1, 2, 3, 4, 5, {'姓名': '思齊', '年龄': '永远18岁'}]
'''
③ 优点

方法append()让动态地创建列表易如反掌,例如,你可以先创建一个空列表,再使用一系列的append()添加元素,因为我们经常要等程序运行后,才知道用户要在程序中存储哪些数据。

为控制用户,可首先创建一个空列表,用于存储用户将要输入的值,然后将用户提供的每一个新值附加到列表中。

2.extend(): 末尾多元素添加

列表名.extend( [元素1,元素2,...] )

'''
    功能: 可向列表中添加多个元素,但是在**列表末尾添加**。
         
    参数: 
        ① 可迭代对象: 将想要添加的元素以 列表 或 元组 形式传入。
                
    返回值: 添加完成后的列表。
'''
① 参数为可迭代对象

一定要注意,extend()的参数是可迭代对象

append()方法一样,如果我们直接在方法的括号里添加多个元素,Python还是会向我们报错TypeError: extend() takes exactly one argument (2 given).extend(iterable, /) method of builtins.list instance Extend list by appending elements from the iterable.,不是说append()可以添加多个元素吗?这是为什么呢?原因就在于extend() 接收可迭代对象。

Ⅰ.传入元组
nums = [1,2,3,4,5]
nums.extend( (9,10) )
print(nums)
'''
    [1, 2, 3, 4, 5, 9, 10]
    向extend()传入一个元组,添加成功。
'''
Ⅱ.传入列表
nums = [1,2,3,4,5]
nums.extend( [7,8] )
print(nums)
'''
    [1, 2, 3, 4, 5, 7, 8]
    向extend()传入一个列表,添加成功。
'''
Ⅲ.传入字典(不可取)
nums = [1,2,3,4,5]
nums.extend( {"姓名":"思齊","年龄":"永远18岁"} )
print(nums)
'''
    [1, 2, 3, 4, 5, '姓名', '年龄']
'''
如果用 + 只是临时添加。

向列表传入一个字典是不可取的,因为会造成数据丢失,从上述结果可看到,只是把键名取出,而键值被省略。

3.insert():任意位置添加

insert(索引,值)

'''
    功能: 可向列表任意位置添加元素。
              
    参数: 
        ① 索引:列表中的位置。 
        ② 值:在这个位置添加什么元素。
    
    返回值: 添加完成后的列表。
'''

insert(index, object, /) method of builtins.list instance.Insert object before index.
① 向列表任意位置添加单个元素
num = [1,2,3,4,5]
num.insert(0,0)
num
② 向列表任意位置添加多个元素
num = [1,2,3,4,5]
num.insert(5,[6,7])
num
# outout: [1, 2, 3, 4, 5, [6, 7]]

num.insert(6,[8,9,10])
num
# outout: [1, 2, 3, 4, 5, [6, 7], [8, 9, 10]]
Ⅰ.多个元素被看作一个整体

其实,insert()方法添加多个元素,并不是实际意义上的添加多个元素,而是添加的多个元素被看成一个整体

六、删除

我们经常需要从列表中删除一个或多个元素。例如:玩家将游戏中的一个小怪兽消灭后,你很可能要将其从存活的小怪兽列表中删除;当用户在你创建的web应用中注销其账户时,你需要将该用户从活跃用户列表中删除。你可以根据位置或值来删除列表中的元素

1.使用del语句删除元素

如果知道要删除的元素在列表中的位置,可使用del语句

del 是一个语句,不是一个列表的方法,所以不需要在 del 后面加上小括号()。

del 加列表名,可以删除整个列表

del 加位置索引,可以删除该位置上的元素

(1)怎么做?

① 删除整个列表
del fruits
② 删除指定位置上的元素
fruits = ['葡萄','草莓','大鸭梨','菠萝']
del fruits[1]   # 删除草莓
③ 连续删除
fruits = ['葡萄','草莓','大鸭梨','菠萝']
del (fruits[1],fruits[2])

# 删除了草莓、菠萝,先删除的是fruits中索引为1的,接着再删除新列表中索引为2的。

(2)永久性删除

使用del语句将值从列表中删除后,你就无法再访问它了。

2.pop():先查出来在删掉,在数据库有用

有时候,你要将元素从列表中删除,并接着使用它的值。

例如:你可能需要获取刚被消灭的小怪兽的x和y坐标,以便在相应的位置显示爆炸效果;在Web应用程序中,你可能要将用户从活跃成员列表中删除,并将其加入到非活跃成员列表中。

方法pop()默认删除列表末尾的元素,并让你能够接着使用它。该术语弹出(pop)就源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。

列表名.pop() 或 列表名.pop( 索引值 )

'''
    功能: 默认删除最后一个元素,或删除指定元素。 

    参数: 
        ① 不写值,默认删除最后一个。
        ② 索引值: 加上一个索引值作为参数的时候,会弹出这个索引值对应的元素。     

    返回值: 删除完成后的列表。
'''   
pop(index=-1, /) method of builtins.list instance
            Remove and return item at index (default last).
         Raises IndexError if list is empty or index is out of range.
① 默认删除最后一个
chinas = ['凤凰','麒麟','玄武','白虎','青龙']
a = china.pop()
print(a)
print(china)
'''
    青龙
    ['凤凰', '麒麟', '玄武', '白虎']
'''
② 根据索引值删除
china.pop(3)
china
# ['凤凰', '麒麟', '玄武']

3.remove(): 删除指定元素

使用remove()删除元素,并不需要知道这个元素在列表中的具体位置,只需要知道该元素存在于列表中即可

若要删除的东西在列表中根本不存在,程序就会报错

remove() 并不能指定删除某个位置的元素,这需要用 del 实现。

列表名.remove( 元素1 )

remove(元素值)
'''
    功能: 删除指定元素。
              
    参数: 
        ① 列表中存在的元素。
    
    返回值: 删除完成后的列表。
'''
① 只删除指定的第一个

只删除指定的第一个值,如果要删除的值在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。

fruits = ['葡萄','菠萝','草莓','大鸭梨','菠萝']
fruits.remove('菠萝')
fruits
# output: ['葡萄', '草莓', '大鸭梨','菠萝']
② 删除不存在的元素
python
fruits = ['葡萄','菠萝','草莓','大鸭梨','菠萝']
fruits.remove('芒果')
fruits

# ValueError: list.remove(x): x not in list
③ 删除时也可接着使用该值

在定义列表后,先将值存储在变量中,接着,用这个变量来告诉Python将哪个值从列表中删除,最后,在列表中该值被删除,但它还存储在变量中。

python
fruits = ['purple','菠萝','草莓','大鸭梨','菠萝']
print(fruits)
fruit = fruits[0]
fruits.remove(fruit)
print(fruits)
print("nA " + fruit.title() + " is too expensive for me.")
'''
    ['purple', '菠萝', '草莓', '大鸭梨', '菠萝']
    ['菠萝', '草莓', '大鸭梨', '菠萝']

    A Purple is too expensive for me.
'''

4.clear():清空列表中所有元素

列表名.clear()

python
'''
    功能: 清空列表中所有元素。 

    参数: 无。      

    返回值: 空列表。
'''   
① 怎么做?
python
fruit = ['葡萄','草莓','大鸭梨','菠萝']
fruit.clear()

5.方法的选择

当我们不确定该选择del语句、pop()、remove()中的哪一个的时候,我们可以按照以下一个简单判断标准:若是我们要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;若是我们在删除元素之后还想继续使用它,就是用pop()或remove()方法


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
author-avatar
志信俊霖2542
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有