当前位置: 首页 > news >正文

[python] list

一、列表排序

按照第一个元素降序,第二个元素升序排序

a = [[1,2],[3,9],[2,5],[2,6],[2,7]]
a.sort(key=lambda x:(-x[0],x[1]))

有两个list A和B,它们长度相等,元素一一对应,请将A中的元素按照B中的元素大小排序,如果B中的元素相等则再按照A中的元素排序

A = [3, 1, 4, 1]
B = [2, 3, 2, 1]
zipped = list(zip(A, B))
zipped.sort(key=lambda x: (x[1], x[0]))
sorted_A = [x[0] for x in zipped]MOD=10**9+7

二、遍历二维列表的列

1.使用 zip 函数:

  • zip 函数可以将多个可迭代对象(如列表)中的元素按索引配对。当应用于二维列表时,它可以有效地转置列表结构,从而实现按列遍历。 - 示例代码如下:
a = [[1, 2], [3, 4]]
for col in zip(*a):    for element in col:        print(element) 
  • 在这个代码中, zip(*a) 对列表 a 进行了“转置”操作。 * 是解包操作符,它将 a 中的子列表作为独立的参数传递给 zip 函数。然后,外层 for 循环遍历转置后的每一列(每个元组),内层 for 循环遍历每列中的元素并打印。

2.使用列表推导式实现按列遍历并收集元素:

  • 可以通过列表推导式来收集每列的元素到一个新的列表结构中。
  • 示例代码如下:
a = [[1, 2], [3, 4]]
columns = [[sub_list[i] for sub_list in a] for i in range(len(a[0]))]
for col in columns:    for element in col:        print(element) 
  • 这里外层列表推导式 [ [sub_list[i] for sub_list in a] for i in range(len(a[0]))] 中,内层列表推导式 [sub_list[i] for sub_list in a] 用于收集每一列的元素, i 表示列索引,通过 range(len(a[0])) 来遍历所有列。最后,再通过外层循环遍历每列并打印其中元素。

3.使用 itertools.zip_longest (适用于列长度可能不同的情况):

  • 如果你的二维列表中每一行的长度可能不同, itertools.zip_longest 会更合适,它会以最长的可迭代对象为基准,缺失的值用指定的填充值(默认为 None )填充。
  • 示例代码如下:
from itertools import zip_longest
a = [[1, 2], [3, 4, 5]]
for col in zip_longest(*a):    for element in col:        if element is not None:print(element)
  • 这里使用 zip_longest 对 a 进行转置,然后遍历转置后的每一列,并且在打印时跳过 None 值(如果存在)。

三、遍历时使用切片

遍历时如果使用切片,那么切片操作得到的新的列表是原列表的一个副本,切片列表的值在创建时就已固定,不受原列表更新的影响,所以获取的是原始值。

a=[1,1,0,0]
for i,c in enumerate(a):if c == 1:a[i+1]+=3a[i+2]+=3print(a)for i,c in enumerate(a[:-1]):if c == 1:a[i+1]+=3a[i+2]+=3print(a)
  • 第一种写法只打印一次,第二种写法会打印两次。这是因为第一种写法,在遍历过程中,每一次循环都会从列表 a 最新的状态里获取元素的值。
  • 而第二种写法,a[:-1] 是对列表 a 进行切片操作得到的一个新列表,它是原列表 a 除去最后一个元素后的副本。一旦这个切片列表被创建,其中元素的值就固定下来了,不会受到后续对原列表 a 修改的影响。在遍历这个切片列表时,c 的值是从这个固定的切片列表中获取的。所以,当 i = 1 时,c 取的是切片列表中对应位置的原始值 1,而不是原列表 a 中更新后的值。

http://www.mrgr.cn/news/90372.html

相关文章:

  • Generate html
  • Solana Playground 入门指南
  • IntelliJ IDEA Console控制台输出成json的配置方式
  • MYSQL——安装
  • 【AIGC】在VSCode中集成 DeepSeek(OPEN AI同理)
  • 迅雷下载的原理和使用协议的分析
  • 分治范式下的快速排序全解:C++实现、时间复杂度优化与工程化实践
  • langchain系列(一) - LangChain 基础概念
  • Win11从零开始配置Ubuntu虚拟机(2025.2)
  • vant4 van-list组件的使用
  • RAG核心机制和原理概述-3
  • 数据结构-基础
  • ES 索引结构
  • 对接DeepSeek
  • 尚硅谷的ShardingShphere分库分表课程总结
  • ARM Cortex-M3/M4 权威指南 笔记【一】技术综述
  • 【腾讯地图】录入经纬度功能 - 支持地图选点
  • 3. CSS中@scope
  • 深入解析 STM32 GPIO:结构、配置与应用实践
  • FAST_LIVO2初次安装编译
  • DaDianNao:一种无主存储器的多核加速器
  • 西门子S7-200 PLC串口PPI转以太网通讯的模块链接方式
  • 解决:Cannot find a valid baseurl for repo: base/7/x86_64
  • 一个简单的Windows TCP服务器实现
  • Unity-Mirror网络框架-从入门到精通之MultipleMatches示例
  • Excel大数据量导入导出