list的总结

目录

1.什么是list

1.1list 的优势和劣势

优势:

劣势:

2.构造函数 

2.1  default (1)

2.2  fill (2)

2.3  range (3)

2.4  copy (4)

3.list iterator的使用

3.1. begin()

3.2. end()

3.3迭代器遍历

4. list容量函数

4.1. empty()

4.2. size()

4.3. max_size()

4.4. front()

4.5. back()

5.list增删查改函数 

5.1 push_front

5.2 pop_front 

5.3  push_back

5.4 pop_back

 5.5 insert

5.6. erase

5.7  swap 

5.8 clear 

 6.list操作函数

6.1. splice

6.2. remove

6.3. unique

6.4. reverse

 7.list的迭代器失效


 追随光靠近光成为光

1.什么是list

在C++标准库中,list 是一个双向链表容器,用于存储一系列元素。与 vector 和 deque 等容器不同,list 使用链表的数据结构来组织元素,因此在某些操作上具有独特的优势和性能特点。以下是关于 list 的详细介绍

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。
3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。
4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。
5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list 的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间 开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这 可能是一个重要的因素)

在使用list 时,需要权衡其优势和劣势,根据实际场景来选择合适的容器。当需要频繁插入和删除元素,且不需要随机访问时,list 可能是一个很好的选择。但需要注意的是,由于链表的特性,list 并不适用于需要快速随机访问元素的场景,因为访问某个位置的元素需要遍历链表

1.1list 的优势和劣势

优势:

插入和删除效率高: 由于 std::list 是双向链表,插入和删除操作在常数时间内完成,不需要涉及内存的重新分配和元素的复制。这使得 std::list 在大量插入和删除操作时非常高效。
迭代器的稳定性: std::list 的插入和删除操作不会使迭代器失效,除非删除的正是迭代器所指向的元素。这使得在遍历过程中进行插入和删除操作更加方便和安全。
空间占用相对稳定: std::list 的空间占用相对稳定,插入和删除操作不会影响其他元素的空间占用。

劣势:

不支持随机访问: 由于链表的结构,list 不支持像数组一样的随机访问。访问某个位置的元素需要从链表的开头或结尾开始遍历。
额外的指针开销:list 中的每个元素都需要存储指向前后元素的指针,这使得空间占用相对其他容器更高。
缓存效率低: 由于链表中元素在内存中的存储位置不连续,导致在访问链表元素时,缓存命中率较低,可能影响性能。
迭代器的使用限制:list 的迭代器不支持与普通指针类似的算术操作(如 + 和 -),因此无法像 vector 那样灵活地进行迭代器操作

2.构造函数 

2.1  default (1)

这个构造函数用于创建一个空的 std::list 容器。它可以接受一个可选的分配器参数,用于指定内存分配策略。

list<int> v; // 创建一个空的 list 容器

2.2  fill (2)

这个构造函数用于创建一个包含 n 个元素的list 容器,并将这些元素初始化为 val。你可以通过传递不同的 val 值来创建一个包含相同值的容器。同样,也可以传递一个可选的分配器参数。

list<int> v(10, 20); // 创建一个包含 10个元素,每个元素都是 20 的list 容器

2.3  range (3)

这个构造函数使用迭代器范围 [first, last) 中的元素创建一个list 容器。这使你可以通过一个迭代器范围来初始化容器。同样,它也接受一个可选的分配器参数。

vector<int> v = {1, 2, 3, 4, 5};
list<int> my(v.begin(), v.end()); // 从迭代器范围内的元素创建list 容器

2.4  copy (4)

这个构造函数用于创建一个与已存在的 list 容器 x 相同的副本。它会将 x中的所有元素拷贝到新的容器中。这是一个拷贝构造函数。

list<int> v = {1, 2, 3, 4, 5};
list<int> my(v); // 创建一个原容器的副本

3.list iterator的使用

3.1. begin()

iterator begin() noexcept;
这个版本的 begin() 返回一个迭代器,可以用于修改容器内的元素。noexcept 表示这个函数不会抛出异常。

list<int> m = {1, 2, 3, 4, 5};
list<int>::iterator it = m.begin(); // 获取可修改元素的迭代器
*it = 10; // 修改第一个元素的值为 10

3.2. end()

iterator end() noexcept;
这个版本的 end() 返回一个迭代器,可以用于修改容器内的元素。noexcept 表示这个函数不会抛出异常。这个迭代器指向的位置实际上是容器的末尾位置之后一个虚拟的位置,所以它并不指向容器内的任何元素。

list<int> m = {1, 2, 3, 4, 5};
list<int>::iterator it = m.end(); // 获取可修改元素的迭代器
--it; // 将迭代器前移一个位置,指向最后一个元素
*it = 20; // 修改最后一个元素的值为 20

3.3迭代器遍历

(list不支持[  ],  只能用迭代器遍历(范围for也可以底层是迭代器))

#include<iostream>
#include<list>
using namespace std;void mylist()
{list<int> m;m.push_back(1);m.push_back(2);m.push_back(3);//迭代器list<int>::iterator it = m.begin();while (it != m.end()){cout << *it << " ";it++;}cout << endl;//范围forfor (auto e : m){cout << e << " ";}cout << endl;}int main()
{mylist();return 0;
}

4. list容量函数

4.1. empty()


empty() 是 list 容器的一个成员函数,用于判断容器是否为空。它返回一个布尔值,表示容器是否不包含任何元素。函数声明如下:

bool empty() const noexcept;

返回值:如果容器为空,则返回 true,否则返回 false。

例子 

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;if (m.empty()) {cout << "The list is empty." << endl;}else {cout << "The list is not empty." << endl;}m.push_back(10);if (m.empty()) {cout << "The list is empty." << endl;}else {cout << "The list is not empty." << endl;}return 0;
}

4.2. size()

size() 是 list 容器的一个成员函数,用于返回容器中元素的数量。它返回一个无符号整数类型,表示容器中的元素数量。函数声明如下:

size_type size() const noexcept;

返回值:返回容器中元素的数量,即大小。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;m.push_back(1);m.push_back(2);m.push_back(3);m.push_back(4);m.push_back(5);cout << "Size of the list: " << m.size() << endl;return 0;
}

4.3. max_size()


max_size() 是 list 容器的一个成员函数,用于返回容器可能容纳的最大元素数量,通常受到系统内存限制的影响。它返回一个无符号整数类型,表示容器的最大大小。函数签名如下:

size_type max_size() const noexcept;

返回值:返回容器可能容纳的最大元素数量。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m;cout << "Size of the list: " << m.max_size() << endl;return 0;
}

 

4.4. front()

front() 是 list 容器的成员函数,用于返回容器中第一个元素的引用。这个函数有两个版本,一个用于可修改容器的对象,另一个用于只读(const)容器的对象。函数的签名如下:

reference front();

reference:返回一个对容器中第一个元素的非常引用。

加了const是只读的不能被修改

#include<iostream>
#include<list>
using namespace std;int main() 
{list<int> m = {9,2,3,4,5,6};int& firstElement = m.front();cout << "First element: " << m.front() << endl;return 0;
}

 

4.5. back()


back() 是 list 容器的成员函数,用于返回容器中最后一个元素的引用。这个函数有两个版本,一个用于可修改容器的对象,另一个用于只读(const)容器的对象。函数的签名如下:

reference back();
reference:返回一个对容器中最后一个元素的非常引用。

加了const是只读的不能被修改

#include<iostream>
#include<list>
using namespace std;int main() 
{list<int> m = {9,2,3,4,5,6};int& firstElement = m.back();cout << "Last element: " << m.back() << endl;return 0;
}

 

5.list增删查改函数 

函数说明接口说明
push_front
在list首元素前插入值为val的元素
pop_front
删除list中第一个元素
push_back
在list尾部插入值为val的元素
pop_back
删除list中最后一个元素
insert
在list position 位置中插入值为val的元素
erase
删除list position位置的元素
swap
交换两个list中的元素
clear
清空list中的有效元素

5.1 push_front

push_front 是 list 容器的成员函数,用于在容器的开头插入一个新元素。

这个函数有两个版本:

void push_front (const value_type& val);:接受一个常量引用参数,会创建一个新元素并将参数的值拷贝到新元素中。

void push_front (value_type&& val);:接受一个右值引用参数,用于移动构造一个新元素。这样可以避免额外的拷贝操作,提高了效率。

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;int value = 10;m.push_front(value); // Copy insertcout << "List contents:" << endl;for (const auto& num : m) {cout << num << " ";}cout << endl;m.push_front(20); // Move insert,右值引用,更简单高效cout << "List contents after move insert:" << endl;for (const auto& num : m) {cout << num << " ";}cout << endl;return 0;
}

 

5.2 pop_front 

void pop_front(); 是用于从 ist 的开头移除一个元素的成员函数。它会删除列表中的第一个元素,并且将列表的大小减小一个单位。

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {10,20,30,40,50};m.pop_front();for (auto e : m){cout << e << " ";}cout << endl;return 0;
}

5.3  push_back

void push_back (const value_type& val); 是 list 容器的成员函数,用于在列表的末尾插入一个新元素。它接受一个常量引用作为参数,将传入的值插入到列表末尾

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;m.push_back(2);m.push_back(4);m.push_back(6);m.push_back(8);m.push_back(10);for (auto e : m){cout << e << " ";}cout << endl;return 0;
}

5.4 pop_back

void pop_back(); 是 list 容器的成员函数,用于删除列表中的最后一个元素。它会将列表的最后一个元素从容器中移除,同时释放相应的内存资源。

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m;m.push_back(2);m.push_back(4);m.push_back(6);m.push_back(8);m.push_back(10);m.pop_back();m.pop_back();list<int>::iterator it = m.begin();while (it != m.end()){cout<<*it<<" ";it++;}cout << endl;return 0;
}

 

 5.5 insert

在list position 位置中插入值为val的元素

iterator insert (iterator position, const value_type& val); 是 list 容器的成员函数,用于在指定位置插入一个新元素,新元素的值由 val 参数确定。

参数说明:

position:要插入新元素的位置的迭代器。
val:要插入的元素的值。
该函数返回一个迭代器,指向插入的元素。

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};auto a = m.begin();a++;   //begin的下一个位置,第二个位置m.insert(a,10);list<int>::iterator it = m.begin();while (it != m.end()){cout<<*it<<" ";it++;}cout << endl;return 0;
}


 

5.6. erase

删除list position位置的元素


iterator erase (iterator position); 和 iterator erase (iterator first, iterator last); 是 std::list 容器的成员函数,用于从列表中删除一个或多个元素。

iterator erase (iterator position); 删除指定位置的元素,并返回指向下一个元素的迭代器。

参数说明:

position:要删除的元素的位置的迭代器。
返回值:指向被删除元素之后的元素的迭代器。

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};auto a = m.begin();a++;   //begin的下一个位置,第二个位置m.erase(a);
}

5.7  swap 

交换两个list中的元素

#include<iostream>
#include<list>
using namespace std;int main()
{list<int> m = {1,2,3,4,5};list<int> n = { 6,7,8,9,0};m.swap(n);list<int>::iterator it = m.begin();cout << "m:";;while (it != m.end()){cout << *it << " ";it++;}cout << endl;list<int>::iterator is = n.begin();cout << "n:";while (is != n.end()){cout << *is << " ";is++;}cout <<  endl;return 0;
}

5.8 clear 

清空list中的有效元素

#include<iostream>
#include<list>
using namespace std;#include <iostream>
#include <list>int main() {list<int> m = { 1, 2, 3, 4, 5 };cout << "m before clear: ";for (int num : m) {cout << num << " ";}cout << endl;m.clear(); // 清空列表cout << "m after clear: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}

 6.list操作函数

6.1. splice

void splice (iterator position, list& x);
该成员函数用于将另一个列表 x 中的所有元素移动到当前列表中,插入到指定位置 position 前。x 列表在移动后会变为空列表。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m1 = { 1, 2, 3 };list<int> m2 = { 4, 5, 6 };auto it = m1.begin();advance(it,1); m1.splice(it, m2); // 将 m2 的元素插入到 m1 中cout << "m1 after splice: ";for (int num : m1) {cout << num << " ";}cout << endl;cout << "m2 after splice: ";for (int num : m2) {cout << num << " ";}cout << endl;return 0;
}

6.2. remove

void remove (const value_type& val);
该成员函数用于从列表中移除所有等于给定值 val 的元素。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 2, 4, 2, 5 };m.remove(2); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}

 

6.3. unique

void unique();
这个成员函数用于移除列表中相邻的重复元素。它只保留第一个出现的重复元素,移除后续的重复元素。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 2, 2, 3, 4,4, 5 };m.unique( ); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}

 

6.4. reverse

void reverse(); 函数用于将列表中的元素逆序排列。

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2,3,4, 5 };m.reverse( ); // 移除列表中所有值为 2 的元素cout << "m after remove: ";for (int num : m) {cout << num << " ";}cout << endl;return 0;
}

 7.list的迭代器失效

迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

当使用 std::list 进行删除操作时,可能会导致迭代器失效。下面是一个示例:

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 4, 5 };auto it = m.begin();++it; // Move the iterator to the second elementm.erase(it); // Erase the second elementfor (auto n : m) {cout << n << " ";}return 0;
}

在上面的示例中,当我们在第二个元素位置处使用 erase 函数删除元素后,迭代器 it 就会失效,因为它指向的元素已经被删除。如果我们尝试使用失效的迭代器,可能会导致未定义的行为

要修正这个问题,可以使用 erase 函数的返回值,它会返回一个指向下一个有效元素的迭代器:

#include<iostream>
#include<list>
using namespace std;int main() {list<int> m = { 1, 2, 3, 4, 5 };auto it = m.begin();++it; // Move the iterator to the second elementit=m.erase(it); // Erase the second elementfor (auto n : m) {cout << n << " ";}return 0;
}


本文章借鉴了「爱学习的鱼佬」的原创文章,原文在下面链接
原文链接:https://blog.csdn.net/kingxzq/article/details/132225841

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音合成综述Speech Synthesis

一、语音合成概述 语音信号的产生分为两个阶段&#xff0c;信息编码和生理控制。首先在大脑中出现某种想要表达的想法&#xff0c;然后由大脑将其编码为具体的语言文字序列&#xff0c;及语音中可能存在的强调、重读等韵律信息。经过语言的组织&#xff0c;大脑通过控制发音器…

qRT-PCR相对定量计算详解qPCR相对定量计算方式——2^-(∆∆Ct) deta t

做完转录组分析之后&#xff0c;一般都要求做qRT-PCR来验证二代测序得到的转录本表达是否可靠。荧光定量PCR是一种相对表达定量的方法&#xff0c;他的计算方法有很多&#xff0c;常用的相对定量数据分析方法有双标曲线法&#xff0c;ΔCt法&#xff0c;2^-ΔΔCt法(Livak法)&a…

顺序表基本操作全面解析

文章目录 1.线性表2.顺序表分类2.1 静态顺序表2.2 动态顺序表 3. 顺序表各接口实现1. 定义结构体(Seqlist)2. 结构体初始化(SLInit)3.检查容量 (SLCheckCapacity)4.打印数据 (SLPrintf)5.插入操作5.1 从数据头部插入(SLPushFront)5.2 从数据尾部插入(SLPushBack)5.3 从任意下标…

GEE:基于 Landst 遥感数据计算的 kNDVI 下载 APP

作者&#xff1a;CSDN _养乐多_ 本文记录了在Google Earth Engine&#xff08;GEE&#xff09;平台中&#xff0c;使用 Landsat 遥感数据计算并且下载 kNDVI 的应用 APP 链接&#xff0c;并介绍该 APP 的使用方法和步骤。该APP可以为用户展示 NDVI 和 kNDVI 的遥感影像&#…

抽象类, 接口, Object类 ---java

目录 一. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 二. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口的使用 2.4 接口间的继承 2.5 抽象类和接口的区别 三. Object类 3.1 toString() 方法 3.2 对象比较equals()方法 3.3 hash…

免费获取GPT-4的五种工具

不可否认&#xff0c;由OpenAI带来的GPT-4已是全球最受欢迎的、功能最强大的大语言模型&#xff08;LLM&#xff09;之一。大多数人都需要使用ChatGPT Plus的订阅服务去访问GPT-4。为此&#xff0c;他们通常需要每月支付20美元。那么问题来了&#xff0c;如果您不想每月有这笔支…

基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现

基于JavaWebSpringBootVue医院管理系统小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏[Java 源码获取 源码获取入口 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 …

井盖位移传感器厂家批发,守护井盖安全

窨井盖广泛分布于城市街道&#xff0c;其管理效果直接反映了城市治理的现代化程度。根据住房和城乡建设部发布的《关于进一步加强城市窨井盖安全管理的通知》&#xff0c;全国各地需加强窨井盖的安全管理。作为市政基础设施的一个重要的组成部分&#xff0c;井盖的管理工作不仅…

去水印网站哪个好?试试这个去水印软件!

在工作中&#xff0c;我们都曾遇到过图片水印的困扰。在众多的在线水印去除工具中&#xff0c;虽然选择看似丰富&#xff0c;但往往很难找到完全满足我们需求的那一个。有些工具操作过程繁复&#xff0c;有些工具在处理复杂水印时力不从心&#xff0c;还有些工具在去水印的过程…

【Spring日志】

一.日志作用 1.定位和发现问题 这是日志的主要用途,通过查看日志,我们可以定位问题发生的位置,从而快速的发现问题,分析问题. 2.系统监控 监控几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,比如记录方法的响应时间,响应状态,通过设置不同的规则,超过阈值就…

葡萄酒按酒体如何分类,都有什么特点?

葡萄酒的酒体是指酒液在口腔中的饱满度和分量感&#xff0c;品酒者常用“轻盈”“厚重”“适中”等词汇来形容。所以&#xff0c;云仓酒庄的品牌雷盛红酒分享在葡萄酒分类中还有一个类型&#xff0c;就是按照酒体进行分类。一般分为轻盈型、中等型、饱满型。 轻盈型&#xff1…

海外https代理ip如何保障信息安全?该怎么选择?

海外https代理ip是指通信协议为https的海外真实网络地址ip&#xff0c;通常应用在各种跨境业务中。 一、什么是HTTPS协议 HTTP协议是一个应用层协议&#xff0c;通常运行在TCP协议之上。它是一个明文协议&#xff0c;客户端发起请求&#xff0c;服务端给出响应的响应。由于网…

表单邮箱密码登录 原生+Jquery实现

文章目录 效果代码邮箱验证正则表达式HTMLCSS JS 效果 正确密码为&#xff1a;123456 点击登录按钮校验。 代码 表单校验 - CodeSandbox 邮箱验证正则表达式 /(?:[a-z0-9!#$%&*/?^_{|}~-](?:\.[a-z0-9!#$%&*/?^_{|}~-])*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1…

Excel表中合并两个Sheet的方法?

按AltF11&#xff0c;调出Visual Basic 界面。 在左侧窗口中&#xff0c;右键选择“插入”—“模块”&#xff1a; 将如下代码粘贴进去&#xff0c;点击运行按钮&#xff0c;完成数据表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…

JOSEF约瑟 热过载保护继电器 JR36-160,整定值100-160A

系列型号 JR36-20 1.0-1.6A热继电器 JR36-20 0.25-0.35A热继电器 JR36-20 0.32-0.5A热继电器 JR36-20 0.45-0.72A热继电器 JR36-20 0.68-1.1A热继电器 JR36-20 1.5-2.4A热继电器 JR36-20 2.2-3.5A热继电器 JR36-20 3.2-5A热继电器 JR36-20 4.5-7.2A热继电器 JR36-20 …

客户案例:保障高校邮件安全,守护教育信息安全堡垒

客户背景 电子科技大学&#xff08;以下简称“电子科大”&#xff09;&#xff0c;位于四川省成都市&#xff0c;是一所历史悠久、实力雄厚的综合性工业大学。作为我国重点建设的双一流高校&#xff0c;电子科大在国内外均享有盛誉&#xff0c;其学科涵盖了理、工、管、文等多…

7.5 Windows驱动开发:监控Register注册表回调

在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举&#xff0c;本章将实现对注册表的监控&#xff0c;不同于32位系统在64位系统中&#xff0c;微软为我们提供了两个针对注册表的专用内核监控函数&#xff0c;通过这两个函数可以在不劫持内核API的前提下实…

Android runtime层是如何通过缩减代码来缩减内存的

文章目录 前言&#xff1a;Android 在设备上改进内存的秘密优化编译器101代码大小改进消除写入障碍隐式暂停检查合并回调其他优化改进代码下沉循环优化消除死代码 – SimplifyAlwaysThrows加载存储消除 – 使用 try catch 块加载存储消除 – 使用释放/获取操作新的内联启发式不…

递归回溯剪枝-子集

LCR 079. 子集 - 力扣&#xff08;LeetCode&#xff09; 方法一 1. 决策树&#xff1a;对于决策树&#xff0c;思考的角度不同&#xff0c;画出的决策树也会不同&#xff0c;这道题可以从两个角度来画决策树。 2. 考虑全局变量的使用&#xff1a; 使用全局变量 List<List&…

Python 基础【五】--数据类型-序列【2023.11.24】

1.定义 Python 中的序列是一块可存放多个值的连续内存空间&#xff0c;所有值按一定顺序排列&#xff0c;每个值所在位置都有一个编号&#xff0c;称其为索引&#xff0c;我们可以通过索引访问其对应值。 list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3…