首页 > 编程语言 >Python-列表

Python-列表

时间:2024-07-02 15:54:12浏览次数:17  
标签:sort Python 元素 列表 fruits sorted 排序

列表

1. 列表

Python列表是:

  • 任意对象的有序集合:列表是收集其他对象的地方,列表维护了元素的每一项从左到右的顺序,也就是说这是序列;
  • 通过偏移访问:像字符串一样,可以通过列表对象的偏移对其进行索引,从而读取对象的某一部分的内容,也可以进行分片和拼接等操作;
  • 可变长度、异构以及任意嵌套:列表可以在原位置增长或缩短(长度可变),并且可以包含任意类型的对象,支持任意的嵌套;
  • 属于可变类型的分类:列表是可变对象(可以在原位置修改),也可以进行索引、分片以及拼接(但进行这些操作时返回的是新列表),还支持删除和索引赋值操作(会在原位置修改列表)
  • 对象引用数组:从技术上讲,Python列表包含了一个或多个其他对象的引用。

1.1 常用列表字面量和操作

常用列表字面量和操作1

常用列表字面量和操作2

2. 列表的实际应用

2.1 列表基本操作

2.1.1 列表操作符

>>> len([1, 2, 3])  # 求列表长度
3
>>> [1, 2, 3] + [4, 5, 6]  # 列表拼接
[1, 2, 3, 4, 5, 6]
>>> ['Ni!'] * 4  # 列表重复
['Ni!', 'Ni!', 'Ni!', 'Ni!']

2.1.2 列表迭代和推导

>>> 3 in [1, 2, 3]
True
>>> for x in [1, 2, 3]:
...     print(x, end=' ')
...
1 2 3
>>> res = [c * 4 for c in 'SPAM']
>>> res
['SSSS', 'PPPP', 'AAAA', 'MMMM']
>>> list(map(abs, [-1, -2, 0, 1, 2]))
[1, 2, 0, 1, 2]
# map函数会对序列的每个元素应用函数abs,并返回结果

2.1.3 索引、分片和矩阵

对列表进行索引返回的是指定的偏移处的对象,而对列表进行分片返回的是一个新的列表:

>>> L = ['spam', 'Spam', 'SPAM']
>>> L[2]
'SPAM'
>>> L[-1]
'SPAM'
>>> L[1:]
['Spam', 'SPAM']

由于可以在列表中嵌套列表,因此需要多次索引才能找到最后的元素,嵌套了子列表的列表就可以表示矩阵:

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> matrix[1]
[4, 5, 6]
>>> matrix[1][1]
5
>>> matrix[2][0]
7

2.1.4 原位置修改列表

索引和分片的赋值

当使用列表时,可以给一个特定项或整个分片来改变它的内容:

>>> L = ['spam', 'Spam', 'SPAM']
>>> L[1] = 'eggs'
>>> L
['spam', 'eggs', 'SPAM']
>>> L[0:2] = ['eat', 'more']
>>> L
['eat', 'more', 'SPAM']

索引和分片的赋值都是在原位置上修改,而不是生成一个新的列表作为结果。

分片赋值实际上包含两步:

  • 删除:删除等号左边指定的分片;
  • 插入:将包含在等号右边的可迭代对象中的片段插入旧分片被删除的位置;

分片赋值不需要保证删除的元素数目与插入的元素数目相等!

>>> L = [1, 2, 3]
>>> L[1:2]
[2]
>>> L[1:2] = [4, 5]  # 相当于替换2这个元素
>>> L
[1, 4, 5, 3]
>>> L[1:1] = [6, 7]  # 相当于在索引1处插入列表[6, 7]中的元素
>>> L
[1, 6, 7, 4, 5, 3]
>>> L[1:2] = []  # 相当于删除6这个元素
>>> L
[1, 7, 4, 5, 3]
>>> L = [1]
>>> L[:0] = [2, 3, 4]  # 相当于在头部插入
>>> L
[2, 3, 4, 1]
>>> L[len(L):] = [5, 6, 7]  # 相当于在尾部插入
>>> L
[2, 3, 4, 1, 5, 6, 7]
列表方法调用

很多列表方法可以在原位置修改主体列表:

>>> L = ['eat', 'more', 'SPAM!']
>>> L.append('please')
>>> L
['eat', 'more', 'SPAM!', 'please']
>>> L.sort()
>>> L
['SPAM!', 'eat', 'more', 'please']

append方法能够将一个单独的元素(对象引用)加至列表末端

sort方法能将列表内的元素进行排序

列表排序

sort方法在原位置对列表进行排序,默认采用<进行比较排序。

list.sort(key=None, reverse=False)

  • key:用于指定排序依据的函数,如果提供了key参数,列表中的每个元素会调用这个函数,并以其返回值作为排序的依据;
  • reverse:布尔值。如果设置为True,列表将被反向排序(降序)。默认值是False(升序)。
>>> numbers = [2, 3, 1, 5, 4]
>>> numbers.sort()
>>> numbers
[1, 2, 3, 4, 5]
# 1. 逆序排序
>>> numbers.sort(reverse=True)
>>> numbers
[5, 4, 3, 2, 1]
# 2. 指定key参数进行排序
>>> fruits = ['apple', 'banana', 'cherry']
>>> fruits.sort(key=len)
>>> fruits
['apple', 'banana', 'cherry']
>>> fruits.sort(key=str.lower)
>>> fruits
['apple', 'banana', 'cherry']
# 3. 自定义排序函数
>>> def sort_by_last_letter(word):
...     return word[-1]
...
>>> fruits.sort(key=sort_by_last_letter, reverse=True)
>>> fruits
['cherry', 'apple', 'banana']

Python提供了sorted内置函数用于对可迭代对象进行排序,但与list.sort方法不同,sorted函数不会改变原始对象而是返回新的排序后的可迭代对象。

sorted(iterable, key=None, reverse=False)

  • iterable:任何可迭代对象(列表、字符串、元组等)

  • key:用于指定排序依据的函数,如果提供了key参数,列表中的每个元素会调用这个函数,并以其返回值作为排序的依据;

  • reverse:布尔值。如果设置为True,列表将被反向排序(降序)。默认值是False(升序);

>>> sorted_numbers = sorted(numbers)
>>> sorted_numbers
[1, 2, 3, 4, 5]
# 1. 逆序排序
>>> sorted_numbers = sorted(numbers, reverse=True)
>>> sorted_numbers
[5, 4, 3, 2, 1]
# 2. 指定key进行排序
>>> fruits = ['apple', 'banana', 'cherry']
>>> sorted_fruits = sorted(fruits, key=len, reverse=True)
>>> sorted_fruits
['banana', 'cherry', 'apple']
# 3. 自定义排序函数
>>> def sort_by_last_letter(word):
...     return word[-1]
...
>>> sorted_fruits = sorted(fruits, key=sort_by_last_letter)
>>> sorted_fruits
['banana', 'apple', 'cherry']
其他常见列表方法
  • reverse方法可以在原位置反转列表
  • extend方法可以在列表末端插入多个元素
  • pop方法可以删除并返回列表末尾的一个元素,pop方法也能接收一个偏移量将偏移量对应的元素从列表中删除并返回

内置的reversed函数也可以将可迭代对象反转,不过是返回反转后的新的可迭代对象。

>>> L = [1, 2]
>>> L.extend([3, 4, 5])
>>> L
[1, 2, 3, 4, 5]
>>> L.pop()
5
>>> L
[1, 2, 3, 4]
>>> L.reverse()
>>> L
[4, 3, 2, 1]
>>> list(reversed(L))
[1, 2, 3, 4]

extend方法 vs append方法

extend方法总是会循环访问传入的可迭代对象,并逐个把产生的元素添加到列表末尾,而append方法会直接把这个传入的可迭代对象添加到尾部而不会遍历它。

extend方法可以向列表尾部添加多个元素,而append方法只能添加一个。

>>> L = [1, 2, 3]
>>> L.extend([4, 5])
>>> L
[1, 2, 3, 4, 5]
>>> L = [1, 2, 3]
>>> L.append([4, 5])
>>> L
[1, 2, 3, [4, 5]]
  • remove方法可以通过值删除列表元素,不过只会删除第一个匹配项,找不到该元素时会抛出ValueError异常
  • insert方法可以在某个偏移处插入元素
  • count方法可以计算某元素在列表中的个数
  • index方法可以查找某元素的索引值,找不到该元素时会抛出ValueError异常
  • clear方法可以清除列表中的所有元素
>>> L = [0, 0, 1, 2, 3]
>>> L.remove(0)
>>> L
>>> L.remove(5)  # 元素不存在时抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
[0, 1, 2, 3]
>>> L.insert(1, 4)  # 在索引1处插入元素4
>>> L
[0, 4, 1, 2, 3]
>>> L.count(0)
1
>>> L.index(2)
3
>>> L.index(5)  # 元素不存在时抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 5 is not in list
>>> L.clear()
>>> L
[]
其他常见列表操作

由于列表是可变类型,可以使用del语句在列表原位置删除某项或者某片段

>>> L = ['spam', 'eggs', 'ham', 'toast']
>>> del L[0]
>>> L
['eggs', 'ham', 'toast']
>>> del L[1:]
>>> L
['eggs']

也可以将列表切片赋值为[](空列表)来删除,但是如果给列表某个索引赋值为[],将会在对应位置存储空列表对象的引用而不是删除该元素

>>> L = ['Already', 'got', 'one']
>>> L[1:] = []
>>> L
['Already']
>>> L[0] = []
>>> L
[[]]

列表的copy方法可以实现一个列表的浅拷贝,作用类似[:]list(L)

>>> L = [1, 2, 3]
>>> L.copy()
[1, 2, 3]
>>> L.copy is L
False
>>> L[:]
[1, 2, 3]
>>> L[:] is L
False

标签:sort,Python,元素,列表,fruits,sorted,排序
From: https://www.cnblogs.com/N1rv2na/p/18280003

相关文章

  • Python类中的初始化方法理解
    在Python类的初始化方法(__init__方法)中,通常会执行以下操作:1、设置实例属性:这些属性将用于存储与实例相关的数据。属性名通常以self.开头,以便它们可以在类的其他方法中访问。例如:self.attribute_name=value2、传递并存储参数:初始化方法通常会接受参数,这些参数可以用于定制......
  • 【Python机器学习】模型评估与改进——带交叉验证的网格搜索
    虽然将数据划分为训练集、验证集、测试集的方法是可行的,也相对常用,但这种方法对数据的划分相当敏感,为了得到对泛化性能的更好估计,我们可以使用交叉验证来评估每种参数组合的性能,而不是仅将数据单次划分为训练集与验证集。代码表示如下:fromsklearn.svmimportSVCfromsklear......
  • Python创建异步任务队列库之Huey使用详解
    概要Huey是一个简单的Python库,用于创建异步任务队列。它的设计目标是简单易用,同时具备强大的功能。Huey可以轻松地将任务添加到队列中,然后在后台线程中处理这些任务,从而避免阻塞主线程。这使得Huey非常适合处理I/O密集型或长时间运行的任务。此外,Huey还支持任务的......
  • Python层次密度聚类算法库之HDBSCAN使用详解
      概要HDBSCAN是一种层次密度聚类算法,它通过密度连接性来构建聚类层次结构。与传统的K-Means算法相比,HDBSCAN具有以下几个显著特点:自动确定聚类数量:HDBSCAN能够根据数据自动确定聚类数量,不需要预先指定。适应噪声和异常点:HDBSCAN在聚类过程中能够很好地处理......
  • 从星载到桌面:Python带你玩转气溶胶数据处理
    在当前全球气候变化和环境污染问题日益突出的背景下,气溶胶研究显得尤为重要。气溶胶在大气中由直径范围在0.01微米至10微米固体和液体颗粒构成,直接或间接影响地球辐射平衡、气候变化和空气质量。尤其在“碳中和”目标的驱动下,研究气溶胶对“碳中和”的气候影响及其环境效应,不仅......
  • 地理信息革命:从入门到精通,用ArcGIS Pro和Python重塑你的数据世界
    你还在为找不到合适的数据而苦恼吗?你还在面对大量数据束手无策,不知如何处理吗?对于从事生产和科研的人员来说,空间数据的采集与管理是地理信息系统(GIS)和空间分析领域的关键环节。通过准确高效地采集和管理空间数据,可以为后续的数据处理、分析和决策提供坚实的基础。本课程将详细......
  • 一位Python用户编程总结
    本文分享了一位资深程序员多年编程经验的总结,涵盖了编程语言、开发工具、编程习惯、软件建模、编写过程注意事项等方面。1.编程语言选择:PythonPython语法简洁、容错率高,变量、数据类型、对象使用方便。网上免费模块丰富,安装方便,打包封装也方便。解释型语言,运行效率稍低,但足......
  • python中实例方法、类方法和静态方法
    在Python中,类方法和静态方法是类中定义的特殊方法,它们与实例方法一起构成了类的行为。以下是类方法和静态方法的详细解释:实例方法实例方法是定义在类中,并接收一个实例对象作为第一个参数的方法。这个参数通常被命名为self,表示它指向当前的实例对象。实例方法可以直接通过实例......
  • python中实例的解释
    在Python中,当您创建一个类的实例时,您实际上是在创建一个类的对象。这个对象是一个新实例,它拥有类定义的所有属性和方法。每个实例都是独立的,可以有自己独特的状态和行为。以下是一些关键点来解释实例:类和实例的关系:类是一个蓝图或模板,定义了一组属性和方法。实例是根据类创......
  • java 查询日期列表月末对应上月末,季度末对应上季度末,年末对应上年末,取列表月度,季度,年
    packagecom.dc.galaxydata.model;importcom.dc.common.util.DateUtil;importjava.util.ArrayList;importjava.util.Date;publicclassEndDates{publicstaticvoidmain(String[]args){ArrayList<Date>dateList=newArrayList<>(......