首页 > 编程语言 >Python教程:深入探索 Python 列表(List)

Python教程:深入探索 Python 列表(List)

时间:2024-03-27 14:59:22浏览次数:27  
标签:教程 Python List 元素 list 列表 对象 my

在 Python 中,列表(List)是一种非常常用且强大的数据结构,它能够存储多个元素,并提供了丰富的操作方法。本文将带您深入探索 Python 列表,从基础知识到高级应用,让您全面掌握列表的各种技巧和用法。

1. 列表基础


1.1 什么是列表

列表是一种有序、可变、允许重复元素的数据结构,用方括号[]来表示。

1.2 创建列表
my_list = [1, 2, 3, 4, 5]
1.3 访问列表元素
print(my_list[0])  # 输出第一个元素
1.4 列表长度和索引
print(len(my_list))  # 输出列表长度

2. 列表操作


2.1 添加元素
my_list.append(6)  # 在末尾添加元素
2.2 删除元素
my_list.remove(3)  # 删除指定元素
2.3 修改元素
my_list[0] = 10  # 修改第一个元素的值
2.4 切片操作
print(my_list[1:3])  # 输出索引1到2的元素

3. 列表方法


3.1 index()
index = my_list.index(4)  # 查找元素4的索引
3.2 sort()
my_list.sort()  # 对列表进行排序

4. 列表推导式


4.1 基本列表推导式语法
squared_numbers = [x**2 for x in range(1, 6)]
4.2 带条件的列表推导式
even_numbers = [x for x in range(1, 11) if x % 2 == 0]

5. 列表的遍历


5.1 使用for循环遍历列表
for num in my_list:
    print(num)
5.2 使用while循环遍历列表
i = 0
while i < len(my_list):
    print(my_list[i])
    i += 1

6. 高级列表操作


6.1 列表排序
my_list.sort(reverse=True)  # 降序排序
6.2 列表过滤
filtered_list = list(filter(lambda x: x > 3, my_list))

7. 列表和函数


7.1 在函数中使用列表作为参数
def sum_list(lst):
    return sum(lst)
7.2 返回列表的函数
def create_list():
    return [1, 2, 3]

8.列表的可变性


当我们创建一个列表时,我们可以随意修改列表中的元素,包括添加新元素、删除元素和修改元素的值。例如:

my_list = [1, 2, 3]
my_list.append(4)  # 添加元素
my_list[0] = 10  # 修改第一个元素的值
del my_list[1]  # 删除第二个元素

这些操作都是直接作用在原列表对象上的,因此列表被称为可变对象。

9.列表的不可变性


相对的,Python 中还有一些不可变的数据类型,例如整数、浮点数、字符串等。不可变对象在创建后,其内容无法被修改。例如:

my_string = "Hello"
my_string[0] = "h"  # 这会导致错误,字符串不可修改

影响

可变性与不可变性的区别在于内存中对象的存储方式和处理方式。可变对象的修改操作是直接在原对象上进行的,而不可变对象的修改操作会创建新的对象。这一区别在并发编程和内存管理方面有重要的影响。

理解可变性与不可变性对于编写高效的 Python 代码至关重要。在设计程序时,需要根据需求选择合适的数据类型,避免不必要的对象创建和内存消耗。

10.列表的内存管理


在 Python 中,变量并不直接存储数据,而是存储指向对象的引用。当创建一个列表时,实际上是在内存中分配了一块空间来存储列表的元素,同时变量名存储了对这个空间的引用。

当对列表进行赋值、切片、修改等操作时,实际上是在原有的内存空间中进行修改,而不是创建新的对象。这种引用计数的内存管理方式可以确保内存的高效利用,并自动处理内存的分配和释放。

11.浅拷贝和深拷贝


浅拷贝(Shallow Copy)

浅拷贝是指创建一个新的对象,新对象中的元素是对原对象中元素的引用。也就是说,新对象和原对象共享相同的子对象,而不是创建子对象的副本。在 Python 中,可以使用copy模块的copy()方法或者列表的切片操作来进行浅拷贝。

import copy

original_list = [1, [2, 3], 4]
shallow_copy = copy.copy(original_list)
深拷贝(Deep Copy)

深拷贝是指创建一个新的对象,新对象中的元素以及所有子对象都是对原对象及其子对象的副本。在 Python 中,可以使用copy模块的deepcopy()方法来进行深拷贝。

import copy

original_list = [1, [2, 3], 4]
deep_copy = copy.deepcopy(original_list)

应用场景

  • 浅拷贝通常用于需要创建一个新对象,但其中的子对象可以共享的情况,可以节省内存和提高效率。
  • 深拷贝通常用于需要完全独立的新对象,包括其中的子对象都是独立复制的情况。

对于复杂的数据结构和嵌套对象,深拷贝能够确保完全独立的副本,避免出现意外的引用关系。

12.常见面试题:如何实现一个快速排序算法来对 Python 列表进行排序?


问题描述:

请编写一个函数,实现快速排序算法来对给定的 Python 列表进行排序。要求使用递归的方式实现快速排序,并确保算法的时间复杂度为 O(n log n)。

详细答案:

快速排序(Quick Sort)是一种高效的排序算法,其基本思想是选择一个基准元素(通常选择列表中的第一个元素),将列表分割成两部分,小于基准元素的放在左边,大于基准元素的放在右边,然后递归地对左右两部分进行排序。

下面是用 Python 实现快速排序算法的代码:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    
    pivot = arr[0]
    left = [x for x in arr[1:] if x < pivot]
    right = [x for x in arr[1:] if x >= pivot]

    return quick_sort(left) + [pivot] + quick_sort(right)

# 测试
my_list = [3, 6, 8, 10, 1, 2, 1]
sorted_list = quick_sort(my_list)
print(sorted_list)
解析:
  • 在 quick_sort 函数中,首先判断列表长度是否小于等于1,若是,则直接返回该列表。
  • 然后选择第一个元素作为基准元素 pivot,并将列表分割为左右两部分,分别存储小于和大于等于基准元素的元素。
  • 接着递归地对左右两部分进行快速排序,并将结果合并起来。
  • 最终返回排序好的列表。

标签:教程,Python,List,元素,list,列表,对象,my
From: https://blog.csdn.net/weixin_40025666/article/details/137076712

相关文章

  • Python读取NC文件指定经度、纬度与时相的数据
    Python读取NC文件指定经度、纬度与时相的数据本文介绍基于Python语言的netCDF4库,读取.nc格式的数据文件,并提取指定维(时间、经度与纬度)下的变量数据的方法。我们之前介绍过.nc格式的数据,其是NetCDF(NetworkCommonDataForm)文件的扩展名,是一种常用的科学数据存储格式,多用于存储科......
  • 双指针的详细教程
    双指针算法是一种常用的算法技巧,它通常用于在数组或字符串中进行快速查找、匹配、排序或移动操作。双指针并非真的用指针实现,一般用两个变量来表示下标(在后面都用指针来表示)双指针算法使用两个指针在数据结构上进行迭代,并根据问题的要求移动这些指针。双指针往往也和单调性......
  • Python程序设计 循环结构
    1.达依尔的麦子数相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么.达依尔说:”只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,后面一格的麦子总是前一格一麦子数的两倍,摆满整个棋盘,我就感恩不尽了。......
  • python 列表基本操作
    python列表基本操作一、列表基本操作1.列表2.访问列表中的值3.更新列表4.删除列表元素5.Python列表脚本操作符6.Python列表截取与拼接7.嵌套列表8.列表比较9.Python列表函数&方法二、代码概述一、列表基本操作1.列表序列是Python中最基本的数据结构......
  • Thymeleaf详细教程(SpringBoot版)
    Thymeleaf详细教程(SpringBoot版):https://blog.csdn.net/YuanFudao/article/details/129085281?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171151147816800222817242%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17115114781......
  • 【实战教程】Spring Boot项目集成华为openGauss数据库的关键步骤与注意事项
    引言:随着国产数据库技术的崛起,华为openGauss凭借其高性能、安全可靠及易用性成为了众多开发者的首选方案。本篇技术文章将聚焦于如何在SpringBoot项目中成功集成华为openGauss数据库,并揭示其中的一些关键步骤与注意事项,助您轻松驾驭这一强大的数据库引擎。正文:一、环境准备......
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键
    一、简介在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。二、安装petl和psycopg2首先,我们需要安装petl和psycopg2......
  • python变量
    python语法【1】注释语法便于开发人员了解代码含义如何添加注释单行注释:只对本行注释#注释多行注释:适用于代码块'''注释'''快捷键:ctrl/代码注释原则:只给特定的代码位置添加必要的注释可以英文,可以中文【2】变量和常量都是用来表示事物或......
  • Electron Mac 打包报 Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT 解决
    ElectronMac打包报Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT解决方法最近在开发的时候,发现打包Electron项目报错,错误的信息为Error:Exitcode:ENOENT.spawn/usr/bin/pythonENOENT报错原因是因为Mac升级到macOSventuraversion13.0.1后系统移除了......
  • 用python创建一个简单的GUI程序,python小案例
    importtkinter这一行导入了tkinter库,这是Python中用于创建图形用户界面(GUI)的标准库之一importtkinterastk这一行同样导入了tkinter库,但是使用了as关键字给它起了一个别名tk,这样在代码中就可以使用tk来代替tkinter了,使代码更简洁。window=tk.Tk()创建一个Tkint......