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

Python中列表与元组的遍历与排序

文章目录

  • Python中列表与元组的遍历与排序
    • 遍历操作
      • 1. 直接遍历元素
      • 2. 通过索引遍历
      • 3. 使用enumerate同时获取索引和值
      • 4. 使用zip并行遍历多个序列
    • 排序操作
      • 列表排序
        • 1. 原地排序 - sort()方法
        • 2. 生成新列表 - sorted()函数
      • 元组排序
      • 复杂对象排序
    • 性能比较
    • 使用建议

Python中列表与元组的遍历与排序

遍历操作

列表和元组都支持多种遍历方式,因为它们都是可迭代对象。

1. 直接遍历元素

# 列表遍历
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:print(fruit)# 元组遍历
colors = ('red', 'green', 'blue')
for color in colors:print(color)

2. 通过索引遍历

# 列表索引遍历
for i in range(len(fruits)):print(f"Index {i}: {fruits[i]}")# 元组索引遍历
for i in range(len(colors)):print(f"Index {i}: {colors[i]}")

3. 使用enumerate同时获取索引和值

# 列表enumerate遍历
for index, fruit in enumerate(fruits):print(f"Index {index}: {fruit}")# 元组enumerate遍历
for index, color in enumerate(colors):print(f"Index {index}: {color}")

4. 使用zip并行遍历多个序列

names = ['Alice', 'Bob', 'Charlie']
ages = (24, 30, 28)for name, age in zip(names, ages):print(f"{name} is {age} years old")

排序操作

虽然列表是可变的、元组是不可变的,但它们的排序方式有所不同。

列表排序

列表有原地排序和生成新列表两种方式:

1. 原地排序 - sort()方法
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()  # 默认升序
print(numbers)  # 输出: [1, 1, 2, 3, 4, 5, 9]# 降序排序
numbers.sort(reverse=True)
print(numbers)  # 输出: [9, 5, 4, 3, 2, 1, 1]# 按自定义规则排序
words = ['banana', 'pie', 'Washington', 'book']
words.sort(key=len)  # 指定排序关键字key,按单词长度排序。如果缺少,默认索引为0的子元素为关键字进行排序
print(words)  # 输出: ['pie', 'book', 'banana', 'Washington']
2. 生成新列表 - sorted()函数
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)  # 不改变原列表
print(sorted_numbers)  # 输出: [1, 1, 2, 3, 4, 5, 9]
print(numbers)  # 原列表不变: [3, 1, 4, 1, 5, 9, 2]

元组排序

由于元组不可变,只能使用sorted()函数生成新的排序后的列表:

numbers_tuple = (3, 1, 4, 1, 5, 9, 2)
sorted_list = sorted(numbers_tuple)  # 返回一个新列表
print(sorted_list)  # 输出: [1, 1, 2, 3, 4, 5, 9]# 如果需要元组结果,可以转换回来
sorted_tuple = tuple(sorted(numbers_tuple))
print(sorted_tuple)  # 输出: (1, 1, 2, 3, 4, 5, 9)

复杂对象排序

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"Person(name='{self.name}', age={self.age})"people = [Person('Alice', 25),Person('Bob', 20),Person('Charlie', 30)
]# 按年龄排序
people.sort(key=lambda p: p.age)
print(people)
# 输出: [Person(name='Bob', age=20), Person(name='Alice', age=25), Person(name='Charlie', age=30)]# 按姓名排序
sorted_people = sorted(people, key=lambda p: p.name)
print(sorted_people)
# 输出: [Person(name='Alice', age=25), Person(name='Bob', age=20), Person(name='Charlie', age=30)]

性能比较

  • 遍历性能:列表和元组的遍历性能几乎相同
  • 排序性能
    • 列表原地排序(sort())最节省内存
    • sorted()函数会创建新对象,内存消耗更大
    • 元组必须使用sorted(),因此会有额外开销

使用建议

  1. 需要修改原序列时使用列表和sort()
  2. 需要保持数据不变时使用元组和sorted()
  3. 对大型数据集排序时考虑使用key参数提高效率
  4. 复杂排序可以使用多个条件的元组作为key:
    # 先按年龄升序,再按姓名降序
    people.sort(key=lambda p: (p.age, -ord(p.name[0])))
    

相关文章:

  • DeepSeek智能时空数据分析(一):筛选特定空间范围内的POI数据
  • python: range()函数用法总结
  • 高级java每日一道面试题-2025年4月11日-微服务篇[Nacos篇]-Nacos使用的数据库及其数据同步机制是什么?
  • Linux——信号(1)信号的产生
  • 【uniapp】vue2 使用 Vuex 状态管理
  • Linux:进程:进程调度
  • 电控---CMSIS概览
  • 关于 AI智能穿戴设备 的详细解析,涵盖其定义、核心技术、功能特性、应用场景、市场现状、挑战与未来趋势,结合典型案例帮助理解其核心价值
  • HTML:表格数据展示区
  • Android studio前沿开发--利用socket服务器连接AI实现前后端交互(全站首发思路)
  • Springboot 自动装配原理是什么?SPI 原理又是什么?
  • 【PGCCC】Postgres MVCC 内部:更新与插入的隐性成本
  • Selenium 获取 Web 页面信息的全指南
  • 【补充篇】Davinci工具要求的dbc格式
  • FortiAI 重塑Fortinet Security Fabric全面智能化进阶
  • ECharts散点图-散点图8,附视频讲解与代码下载
  • 解锁智能制造:PLC远程下载如何让设备运维效率提升10倍?
  • 【C++ Qt】Hello World、初始信号槽、理解对象树 ~~~(通俗易懂 图文并茂)
  • Prometheus thanos架构
  • 【HDFS入门】HDFS高可用性与容错机制深度解析
  • 国家能源局:4月份全社会用电量同比增长4.7%
  • 【社论】鸿蒙破壁,向最难处攻坚
  • 第78届世界卫生大会20日审议通过“大流行协定”
  • 钟南山谈新冠阳性率升高:可防可治不用慌,高危人群应重点关注
  • 国家发改委:不断完善稳就业稳经济的政策工具箱,确保必要时能够及时出台实施
  • 周慧芳任上海交通大学医学院附属上海儿童医学中心党委书记