Python 切片初学者指南

2023-10-19

在本教程中,您将了解切片在 Python 中的工作原理以及如何使用它来操作字符串、列表和元组等序列。

我们还将演示 Python 切片对象如何创建可用于对序列进行切片的切片。

这些知识将为您提供一个强大的工具来访问序列中的多个项目,以删除多个项目或插入多个项目等方式管理它们。
准备好潜入了吗?我们走吧!

 

 

Python 索引和切片

索引和切片是 Python 的两个不可或缺的概念,用于访问序列中的元素,例如列表、字符串和元组。在这里,我们将讨论每个概念是什么,并提供示例来帮助您理解。

Indexing

索引是指使用索引访问序列中的各个元素。 Python 中的索引从第一个元素的 0 开始,并为每个后续元素增加 1。例如:


data = ['a', 'b', 'c', 'd', 'e']
print(data[1])
  

Output:


'b'
  

在此代码中,我们使用索引来访问列表中的第二个元素(“b”)。

Slicing

另一方面,切片允许您获取序列的子集(或“切片”)。它不仅限于单个元素 - 它可以一次性处理多个项目。例如:


print(data[1:3])
  

Output:


['b', 'c']
  

这里我们使用切片来获取列表的一部分。data[1:3]返回一个新列表,其中包含从索引 1(包含)到 3(不包含)的项目。

 

Python 中的切片是如何工作的?

Python 中有两种主要的切片方法:使用切片表示法和使用slice()功能。

以下是每项的概述:

切片符号

切片表示法可能是您最熟悉的。它简单易读。

切片符号如下所示:my_list[start:stop:step].

  • start:切片开始的索引。如果省略,将从头开始。
  • stop:切片将停止的索引。该索引不包含在切片中。
  • step:指数增加的量。如果省略,则默认为 1。

示例1:


my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(my_list[1:7:2])
  

Output:


[1, 3, 5]
  

该切片返回一个列表,其中包含从索引 1 到索引 7(但不包括索引 7)的元素,步长为 2。

示例2:


print(my_list[2:])  

Output:


[3, 4, 5, 6, 7, 8, 9]  

该切片从索引 2 处的元素开始,包括到列表末尾的所有元素。

示例3:


print(my_list[:3])  

Output:


[1, 2, 3]  

该切片包含从列表开头到(但不包括)索引 3 处的元素的所有元素。

示例4:


print(my_list[2::2])  

Output:


[3, 5, 7, 9]  

该切片从索引 2 处的元素开始,并以步长 2 遍历列表,因此它包括从索引 2 到列表末尾的所有其他元素。

实施例5:


print(my_list[:3:2])  

Output:


[1, 3]  

该切片从列表的开头开始,在索引 3 之前结束,每隔一个元素(步骤 2)。

slice()功能

The slice()函数创建一个切片对象,然后您可以使用它来对序列进行切片。该函数采用与切片符号相同的三个参数(开始、停止、步骤)。

这是使用相同的示例slice()功能:


my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
my_slice = slice(1, 7, 2)
print(my_list[my_slice])  

Output:


[1, 3, 5]  

其优点之一是slice()功能是您可以创建一个切片对象一次并多次使用它,如果您在多个地方应用相同的切片,这可以使您的代码更干净、更高效。

此外,使用slice()当切片索引是计算出来的或来自变量时,函数可能很有用,特别是在定义需要执行切片的函数或方法并且想要参数化切片边界的情况下。

 

创建切片对象

让我们看看如何使用以下命令创建和使用切片对象slice功能。
这是一般语法slicePython 中的函数:


slice(stop)
slice(start, stop, step)
  
  • start: 这是可选的。一个整数,指定从哪个位置开始切片。默认值为“无”。
  • stop: 一个整数,指定在哪个位置结束切片。
  • step: 这是可选的。整数指定切片的步骤。默认值为“无”。

让我们看一些例子:


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_obj = slice(2, 6)

# Use the slice object
print(my_list[slice_obj])
  

Output:


[3, 4, 5, 6]
  

在这里,我们创建了一个切片对象start=2 and stop=6。然后,我们使用这个切片对象对列表进行切片,从而产生从第三个元素到第六个元素的新列表。
切片对象也可以与字符串一起使用:


text = "Hello, World!"
slice_obj = slice(7, 12)

# Use the slice object
print(text[slice_obj])
  

Output:


World
  

在此示例中,我们创建了一个切片对象并用它来对字符串进行切片,生成子字符串“World”。

在大多数情况下,常规切片表示法就足够了,而且更常见,因为它通常更容易阅读和理解。

 

如何切片字符串以获得子字符串?

就像我们对列表进行切片一样,我们可以对字符串使用相同的切片技术来提取子字符串。以下是对字符串进行切片的方法:


text = "Hello, World!"
substring = text[7:12]
print(substring)
  

Output:


'World'
  

在此示例中,我们对从索引 7 开始到索引 12 之前结束的字符串进行切片,以提取子字符串“World”。

 

如何使用步长对字符串进行切片?

步长通常称为“步幅”,是 Python 切片中的第三个参数,用于控制切片中包含的每个项目之间要跳过的项目数量。

让我们深入研究一下在切片字符串时如何使用步长。


text = "Python Programming"
substring = text[::2]
print(substring)
  

Output:


'Pto rgamn'
  

在此 Python 示例中,我们使用的步长大小为 2,这会导致字符串中每隔一个字符出现一次。

我们从头开始(因为未指定开始),直到结束(因为未指定结束),并选择每隔一个字符。

 

如何从头到尾切割字符串?

Python 的切片机制还允许从末尾到开头对字符串进行切片。这是通过使用负步长值来实现的。其做法如下:


text = "Hello, Python!"
reverse_text = text[::-1]
print(reverse_text)
  

Output:


'!nohtyP ,olleH'
  

在此示例中,我们从末尾到开头对字符串进行了切片。这[::-1]slice 的工作原理是从字符串末尾开始(由于未指定起始索引和结束索引,因此使用完整字符串),然后向后移动,如步长大小 -1 所示。

 

如何使用负索引进行切片?

我们可以使用负数作为起始索引,从末尾的特定位置开始切片。

让我们看看如何使用负索引进行切片。

字符串负索引


text = "Hello, World!"
substring = text[-6:-1]
print(substring)
  

Output:


'World'
  

在此示例中,我们使用负索引来提取子字符串“World”。切片[-6:-1]从倒数第六个字符 ('W') 开始,到最后一个字符 ('!') 之前停止。

我们还可以在停止索引中使用负数:


text = "Hello, World!"
substring = text[-6:-7:-1]
print(substring)  
Output:

W  

列表负索引

同样的原则也适用于列表:


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_list = my_list[-4:-1]
print(slice_list)
  

Output:


[6, 7, 8]
  

在这里,我们使用负索引对列表进行了切片。切片[-4:-1]从倒数第四个项目 (6) 开始,并在最后一个项目 (9) 之前停止。

 

如何对列表或元组进行切片?

在Python中,切片不仅仅适用于字符串。我们可以使用相同的技术来对列表和元组等序列进行切片。让我们用一些例子来说明这一点。

切片列表


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
slice_list = my_list[2:6]
print(slice_list)
  

Output:


[3, 4, 5, 6]
  

在此示例中,我们对从索引 2 开始到索引 6 之前结束的列表进行了切片。

元组切片

元组切片遵循相同的语法:


my_tuple = ('a', 'b', 'c', 'd', 'e')
slice_tuple = my_tuple[1:4]
print(slice_tuple)
  

Output:


('b', 'c', 'd')
  

在此示例中,我们对一个元组进行了切片,从索引 1 开始到索引 4 之前结束。

 

使用切片复制

您可以使用切片来创建序列的副本。语法[:] or [::]通常用于此目的。这将创建一个新列表,其中包含原始列表中的所有元素。

让我们看一个例子:


original_list = [1, 2, 3, 4, 5]
copied_list = original_list[:]
print(copied_list)  

Output:


[1, 2, 3, 4, 5]  

在这里,我们复制了original_list使用切片并将其分配给copied_list.

Now, copied_list是一个单独的列表,具有相同的元素original_list.

这种复制方式很有用,因为它创建了一个独立于原始列表的新列表。因此,对原始列表的更改不会影响复制的列表,反之亦然。


original_list[0] = 'a'
print("Original:", original_list)
print("Copied:", copied_list)  

Output:


Original: ['a', 2, 3, 4, 5]
Copied: [1, 2, 3, 4, 5]  

如您所见,修改original_list不影响copied_list.

 

将值分配给切片(切片分配)

Python 提供了将值分配给列表的一部分的能力。此操作通常称为“切片分配”。

如何更新物品?

您可以使用切片分配来更改列表的一部分。
下面是一个例子来证明这一点:


my_list = [1, 2, 3, 4, 5, 6]

my_list[1:4] = ['a', 'b', 'c']
print(my_list)
  

Output:


[1, 'a', 'b', 'c', 5, 6]
  

在此示例中,我们分配了列表['a', 'b', 'c']到索引 1 到 4 的切片my_list.

因此,第二个、第三个和第四个元素my_list被替换。

如何追加项目?

您可以使用切片分配将新项目附加到现有列表,而无需覆盖任何项目,如下所示:


my_list = [1, 2, 3, 4, 5]
my_list[len(my_list):] = [6, 7, 8]
print(my_list)
  

Output:


[1, 2, 3, 4, 5, 6, 7, 8]
  

在这个例子中,my_list[len(my_list):]是一个从列表末尾开始的空切片。

通过将此切片设置为[6, 7, 8],我们将这些项目附加到列表末尾,而不覆盖任何现有项目。
这本质上相当于使用list.extend()方法或+=运算符,但它展示了 Python 切片赋值的多功能性。

如何在中间插入项目?

您可以使用切片分配在列表中间插入项目,而无需删除任何现有元素。
操作方法如下:


my_list = [1, 2, 4, 5]
my_list[2:2] = [2.5, 3]
print(my_list)
  

Output:


[1, 2, 2.5, 3, 4, 5]
  

在这个例子中,my_list[2:2]是我们要插入项目的位置的空切片。通过将此切片设置为[2.5, 3],我们在此位置插入这些项目,而不覆盖任何现有项目。

切片的开始和结束位于相同的索引,因此原始列表中的任何元素都不会被删除或替换。

如何删除项目?

通过将列表的一部分设置为空列表,您可以有效地删除这些项目。
它的工作原理如下:


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_list[2:5] = []
print(my_list)
  

Output:


[1, 2, 6, 7, 8, 9]
  

在此示例中,我们删除了从索引 2 到索引 5 的列表切片。通过将此切片设置为空列表,我们从列表中删除了这些项目。
请记住,此操作会修改原始列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 切片初学者指南 的相关文章

  • Python:urlretrieve PDF下载

    我在 Python 中使用 urllib 的 urlretrieve 函数来尝试从网站上获取一些 pdf 它 至少对我来说 已停止工作并正在下载损坏的数据 15 KB 而不是 164 KB 我已经用几个 pdf 对此进行了测试 但都没有成功
  • C++ 相当于 Python getattr

    在Python中 有一个名为getattr的函数 它看起来像这样 class MyObject def init self self xyz 4 obj MyObject getattr obj xyz 其中对 getattr 的调用将返回
  • Python Numpy TypeError:输入类型不支持 ufunc 'isfinite'

    这是我的代码 def topK dataMat sensitivity meanVals np mean dataMat axis 0 meanRemoved dataMat meanVals covMat np cov meanRemov
  • 在Python中解析空选项

    我有一个应用程序 允许您将事件数据发送到自定义脚本 您只需布置命令行参数并指定什么事件数据与什么参数相匹配 问题是这里没有真正的灵活性 您制定的每个选项都将被使用 但并非每个选项都必须有数据 因此 当应用程序构建要发送到脚本的字符串时 某些
  • 在 python 中返回 self [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个代表对象的类 我有很多方法可以修改这个对象状态 没有明显的返回或显然没有任何返回 在 C 中 我会将所有这些方法声明为void
  • 如何在Python中通过URL下载Azure Blob存储文件?

    我正在尝试从我的存储帐户下载 Azure Blob 存储文件 为此 我检查了 URL 是什么 并且正在执行以下操作 with urllib request urlopen
  • python 正则表达式中括号的奇怪行为

    我正在编写一个 python 正则表达式 它可以在文本文档中查找引用的字符串 从黑匣子中记录的航空公司飞行员的引用 我首先尝试编写具有以下规则的正则表达式 返回引号之间的内容 如果以 single 打开 则仅在以 single 关闭时返回
  • 在 AWS Elastic Beanstalk 中部署 Flask 应用程序

    当我部署 Flask 应用程序时 它显示成功 但是当我检索日志时 我看到错误 找不到 Flask 我的需求文件中有烧瓶 任何帮助 Sat Jan 11 06 51 50 503908 2020 error pid 3393 remote 1
  • Python lmfit:拟合 2D 模型

    我正在尝试将二维高斯拟合到一些灰度图像数据 该数据由一个二维数组给出 lmfit 库实现了一个易于使用的模型类 它应该能够做到这一点 不幸的是文档 http lmfit github io lmfit py model html http
  • 如何使用增量值向 Pyspark 中的 DataFrame 添加列?

    我有一个名为 df 的 DataFrame 如下所示 Atr1 Atr2 Atr3 A A A B A A C A A 我想向其中添加一个具有增量值的新列并获取以下更新的 DataFrame Atr1 Atr2 Atr3
  • 如何在 Python 中重命名文件并保留创建日期

    我知道创建日期不存储在文件系统本身中 但是当我使用时我遇到了问题os rename 它正在更新我正在使用的文件的创建日期 是否可以重命名文件而不更改其原始创建日期 正如都铎所说 你可以使用os stat http docs python o
  • Python 字符串参数解析

    我正在 python 中使用 cmd 类 它将所有参数作为一个大字符串传递给我 将此 arg 字符串标记为 args 数组的最佳方法是什么 Example args arg arg1 arg2 with quotes arg4 arg5 1
  • Kivy:滚动缩放

    有没有办法在桌面 kivy 应用程序上放大图像 例如使用鼠标滚轮缩放 这里似乎讨论过 https github com kivy kivy issues 3563 https github com kivy kivy issues 3563
  • 如何使用Django模板作为组件?

    我有 5 个模板 index html detail html tag html login html register html and a 基本 html 所有 5 个模板都会扩展基本 html 索引 html 详细信息 html 标签
  • 为什么这个记忆器适用于递归函数?

    我不明白为什么下面的代码是这样的fib以线性而非指数时间运行 def memoize obj Memoization decorator from PythonDecoratorLibrary Ignores kwargs cache ob
  • 尝试输入字符串时出现名称错误[重复]

    这个问题在这里已经有答案了 import pickle import os import time class Person def init self number address self number number self addr
  • python字符串包含双引号字符

    我的输入字符串由字符组成 包括双引号和单引号 和 B SS JU PQ AD DDSFD ABD E J 但是 当我从文本文件打开上述输入并打印它时 第三行中的双引号 被打印为 xe2 x80 x9d 我的目标是进行简单的字符计数 B 2
  • 在大型文本文件中查找重复记录

    我在一台 Linux 机器 Redhat 上 并且有一个 11GB 的文本文件 文本文件中的每一行包含单个记录的数据 并且该行的前 n 个字符包含该记录的唯一标识符 该文件包含略多于 2700 万条记录 我需要验证文件中不存在具有相同唯一标
  • Python list.extend() 是保序的吗?

    我想知道扩展函数是否保留两个列表中的顺序 gt gt list 1 2 3 gt gt list extend 4 5 gt gt list 1 2 3 4 5 扩展总是这样工作吗 Yes list extend just extends给
  • 预提交钩子 git 错误

    我正在尝试在 python 中执行预提交 git hook 以检查文件的行长度是否小于 80 个字符 但是我收到没有此类文件 目录的错误 我在 fedora 上并设置了 usr bin python help 将不胜感激 usr bin e

随机推荐

  • 如何更改 Linux 内核中的 Swappiness 值

    Swappiness 是一个 Linux 内核参数 用于控制交换空闲进程和使用可用 RAM 内存之间的平衡 大多数Linux发行版中的默认交换值是60 这意味着当可用内存低于40 时系统开始交换进程 但是 此默认值可能并不适合所有情况 更改
  • Linux 中的 du 命令及有用示例

    du 是缺少磁盘使用 这意味着 du 命令计算文件在磁盘上使用的大小 它是Linux系统用户经常使用的基本Linux命令 Syntax du OPTION FILE 在本教程中 您将通过有用的示例了解 du 命令在 Linux 中的用法 d
  • 如何在 PHP 中向数组追加项目

    问题 如何在 PHP 中向数组追加项目 如何在 PHP 中将任何元素追加到现有数组的末尾 如何在 PHP 中将元素推送到数组 本教程使用数组推 函数将新元素插入或追加到数组末尾 PHP 将元素追加到数组 以下示例创建一个包含两个元素 如 b
  • 如何在 Ubuntu 18.04 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 可帮助您自动执行安装 更新 配置和删除 npm 包的过程 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 在本教程中
  • 如何在 CentOS 7 上安装 Python 3

    本教程将指导您使用 Software Collections SCL 以及发行版默认 Python 版本 2 7 在 CentOS 7 系统上安装 Python 3 我们还将向您展示如何创建 Python 虚拟环境 Python 是世界上最
  • 如何在 Debian 10 Linux 上安装 Vagrant

    Vagrant是一个用于构建和管理虚拟机环境的开源命令行工具 默认情况下 Vagrant 可以在 VirtualBox Hyper V 之上配置计算机 和码头工人 其他提供商如 Libvirt KVM VMware 和 AWS 可以通过 V
  • Linux 中的 Wget 命令及示例

    GNU Wget 是一个用于从网络下载文件的命令行实用程序 使用 Wget 您可以使用 HTTP HTTPS 和 FTP 协议下载文件 Wget 提供了许多选项 允许您下载多个文件 恢复下载 限制带宽 递归下载 后台下载 镜像网站等等 本文
  • 如何在 Ubuntu 20.04 上安装 Odoo 15

    Odoo 是一款流行的开源商业应用程序套件 可帮助公司管理和运营其业务 它包括广泛的应用程序 例如 CRM 电子商务 网站构建器 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo根据使用案例和可用技术 可以以不同的方
  • 如何在 Debian 10 Linux 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome JavaScript 构建的跨平台 JavaScript 运行时环境 旨在在服务器端执行 JavaScript 代码 使用 Node js 您可以构建可扩展的网络应用程序 npm 是 Node js
  • 如何在 Debian 9 上安装 Java

    在本教程中 我们将逐步介绍在 Debian 9 上安装 Java Java 是用于构建不同类型的应用程序和系统的最流行的编程语言之一 用 Java 开发的应用程序具有可扩展性 灵活性和可维护性 有两种不同的 Java 包 Java 运行时环
  • 如何在 Debian 9 上安装和使用 PHP Composer

    Composer是 PHP 的依赖管理器 类似于Node js 的 npm or Python 的点子 Composer 将提取您的项目所依赖的所有必需的 PHP 包并为您管理它们 本教程提供了在 Debian 9 系统上安装 Compos
  • 如何列出 CentOS 上已安装的软件包

    在本教程中 我们将向您展示如何列出和过滤 CentOS 上已安装的软件包 当您需要在另一台计算机上安装相同的软件包或想要重新安装系统时 了解如何列出 CentOS 系统上已安装的软件包会很有帮助 我们还将向您展示如何检查是否安装了特定的软件
  • 如何检查您的 CentOS 版本

    当您第一次登录 CentOS 计算机时 在进行任何工作之前 您可能需要检查系统上运行的 CentOS 版本 在本教程中 我们将展示几个不同的命令 了解如何检查系统上安装的 CentOS 版本 截至撰写本文时 CentOS Linux 拥有三
  • 如何在 CentOS 8 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 CentOS 时 不存在交换分区 因此唯
  • 配置 Magento 2 在 CentOS 7 上使用 Varnish

    页面速度或加载时间对于在线商店的成功至关重要 加载时间是加载特定页面上的内容所需的总时间 加载时间越长 转化率越低 这也是谷歌考虑确定搜索引擎排名的最重要因素之一 在第一篇文章中 我们在 CentOS 7 机器上安装了 Magento 2
  • 自动启动 wampserver 在 Windows 10 上自动启动

    在向您展示如何自动启动 wampserver 之前 我先简单介绍一下 Wampserver 是 Windows 平台上最好的 Web 开发堆栈之一 与 xampp 相比 我更喜欢它 因为它有方便的托盘菜单 可以让我访问任何配置 您可以从此网
  • 使用 Sed 命令删除行:Linux 文本删除教程

    Using sed命令从文件或流中删除行是常见操作 使用删除行的基本语法sed如下 sed pattern to match d filename Here pattern to match是您要在文件的每一行中匹配的模式 如果一行包含指定
  • 使用 to_sql 将 Python Pandas DataFrame 导出到 SQL

    The to sql函数允许您将存储在 DataFrame 中的记录写入 SQL 数据库 通过使用 SQLAlchemy 可以使用该库支持的任何数据库 在接下来的部分中 我们将更深入地研究此功能并探索更多功能 目录 hide 1 基本语法和
  • Python NumPy arange() 教程

    NumPyarange 函数用于生成给定区间内的值序列 您可以将其视为数字范围生成器 它允许您创建一个 NumPy 数组 其值在指定范围内均匀分布 它提供了更多功能 例如使用浮点数的能力以及显式定义数组中包含的值的间隔的灵活性 在本教程中
  • Python 切片初学者指南

    在本教程中 您将了解切片在 Python 中的工作原理以及如何使用它来操作字符串 列表和元组等序列 我们还将演示 Python 切片对象如何创建可用于对序列进行切片的切片 这些知识将为您提供一个强大的工具来访问序列中的多个项目 以删除多个项