教你Python字符串的基本操作:拆分和连接

摘要:


由于字符串数据几乎无处不在,因此掌握有关字符串的交易工具非常重要。幸运的是,Python 使字符串操作变得非常简单,尤其是与其他语言甚至旧版本的 Python 相比时。

生活中几乎没有什么保证:死亡、税收和需要处理字符串的程序员。字符串可以有多种形式。它们可以是非结构化文本、用户名、产品描述、数据库列名称,或者我们使用语言描述的任何其他内容。

由于字符串数据几乎无处不在,因此掌握有关字符串的交易工具非常重要。幸运的是,Python 使字符串操作变得非常简单,尤其是与其他语言甚至旧版本的 Python 相比时。

在本文中,您将学习一些最基本的字符串操作:拆分、连接和连接。您不仅会学习如何使用这些工具,而且会更深入地了解它们的工作原理。

拆分字符串


在 Python 中,字符串表示为str对象,它们是 不可变的 :这意味着不能直接更改内存中表示的对象。这两个事实可以帮助您学习(然后记住)如何使用.split().

您是否已经猜到字符串的这两个特性与 Python 中的拆分功能有何关系?如果您猜测这.split()是一个 实例方法 ,因为字符串是一种特殊类型,那么您是对的!在其他一些语言(如 Perl)中,原始字符串用作独立.split()函数的输入,而不是对字符串本身调用的方法。

注意:调用字符串方法的方法

像这样的字符串方法.split()在这里主要显示为在字符串上调用的实例方法。它们也可以被称为静态方法,但这并不理想,因为它更“冗长”。为了完整起见,这里有一个例子:

Avoid this:

str.split(‘a,b,c’, ‘,’)

当您将其与首选用法进行比较时,这既笨重又笨拙:

Do this instead:

‘a,b,c’.split(‘,’)

有关 Python 中的实例、类和静态方法的更多信息,请查看我们的深入教程。

字符串不变性怎么样?这应该提醒您字符串方法不是就地操作,但它们会在内存中返回一个新对象。

注意:就地操作

就地操作是直接更改调用它们的对象的操作。一个常见的例子是在列表上使用的.append()方法:当你调用一个列表时,通过将输入添加到同一个列表来直接更改该列表。.append().append()

无参数拆分

在深入之前,让我们看一个简单的例子:

‘this is my string’.split()

[‘this’, ‘is’, ‘my’, ‘string’]

这实际上是.split()调用的一个特例,我选择它是为了它的简单性。没有指定任何分隔符,.split()将任何空格都算作分隔符。

裸调用的另一个特点.split()是它会自动删除前导和尾随空格,以及连续的空格。比较.split()在没有分隔符参数的情况下调用以下字符串和有’ '作为分隔符参数的调用:

s = ’ this is my string ’

s.split()

[‘this’, ‘is’, ‘my’, ‘string’]

s.split(’ ')

[‘’, ‘this’, ‘’, ‘’, ‘is’, ‘’, ‘my’, ‘string’, ‘’]

首先要注意的是,这展示了 Python 中字符串的不变性:后续调用.split()处理原始字符串,而不是第一次调用.split().

您应该看到的第二件事也是主要的事情是,bare .split()call 提取句子中的单词并丢弃任何空格。

指定分隔符

.split(’ '),另一方面,更字面意思。当有前导或尾随分隔符时,您将得到一个空字符串,您可以在结果列表的第一个和最后一个元素中看到该字符串。

如果有多个连续的分隔符(例如“this”和“is”之间以及“is”和“my”之间),第一个将用作分隔符,随后的分隔符将进入您的结果列表作为空字符串。

注意:调用中的分隔符 .split()

虽然上面的示例使用单个空格字符作为 的分隔符输入.split(),但用作分隔符的字符类型或字符串长度不受限制。唯一的要求是你的分隔符是一个字符串。你可以使用从"…“到 even 的任何东西"separator”。

使用 Maxsplit 限制拆分

.split()有另一个可选参数称为maxsplit. 默认情况下,.split()将在调用时进行所有可能的拆分。maxsplit但是,当您为 赋值时,只会进行给定数量的拆分。使用我们之前的示例字符串,我们可以看到maxsplit:

s = “this is my string”

s.split(maxsplit=1)

[‘this’, ‘is my string’]

如上所示,如果设置maxsplit为1,则第一个空白区域将用作分隔符,其余的将被忽略。让我们做一些练习来测试到目前为止我们学到的一切。

练习:“自己尝试:Maxsplit”显示隐藏

当你给一个负数作为maxsplit参数时会发生什么?

解决方案:“自己尝试:Maxsplit”显示隐藏

.split()将在所有可用的分隔符上拆分您的字符串,这也是maxsplit未设置时的默认行为。

练习:“部分理解检查”显示隐藏

您最近收到了一个格式非常糟糕的逗号分隔值 (CSV) 文件。您的工作是将每一行提取到一个列表中,该列表的每个元素代表该文件的列。是什么让它格式错误?“地址”字段包含多个逗号,但需要在列表中表示为单个元素!

假设您的文件已作为以下多行字符串加载到内存中:

Name,Phone,Address

Mike Smith,15554218841,123 Nice St, Roy, NM, USA

Anita Hernandez,15557789941,425 Sunny St, New York, NY, USA

Guido van Rossum,315558730,Science Park 123, 1098 XG Amsterdam, NL

您的输出应该是一个列表列表:

[

[‘Mike Smith’, ‘15554218841’, ‘123 Nice St, Roy, NM, USA’],

[‘Anita Hernandez’, ‘15557789941’, ‘425 Sunny St, New York, NY, USA’],

[‘Guido van Rossum’, ‘315558730’, ‘Science Park 123, 1098 XG Amsterdam, NL’]

]

每个内部列表代表我们感兴趣的 CSV 行,而外部列表将它们保存在一起。

解决方案:“部分理解检查”显示隐藏

这是我的解决方案。有几种方法可以攻击它。重要的是您使用.split()了它的所有可选参数并获得了预期的输出:

input_string = “”"Name,Phone,Address

Mike Smith,15554218841,123 Nice St, Roy, NM, USA

Anita Hernandez,15557789941,425 Sunny St, New York, NY, USA

Guido van Rossum,315558730,Science Park 123, 1098 XG Amsterdam, NL"“”

def string_split_ex(unsplit):

results = []

Bonus points for using splitlines() here instead,

which will be more readable

for line in unsplit.split(‘\n’)[1:]:

results.append(line.split(‘,’, maxsplit=2))

return results

print(string_split_ex(input_string))

我们.split()在这里打了两次电话。第一次使用可能看起来很吓人,但别担心!我们将逐步完成它,您会对这些表达式感到满意。让我们再看看第一个.split()调用:unsplit.split(‘\n’)[1:].

第一个元素是unsplit,它只是指向输入字符串的变量。然后我们有我们的.split()电话:.split(‘\n’)。在这里,我们正在拆分一个称为 换行符特殊字符

有什么作用\n?顾名思义,它告诉正在读取字符串的任何人,它后面的每个字符都应该显示在下一行。在像我们这样的多行字符串中,每行末尾input_string都有一个隐藏\n。

最后一部分可能是新的:[1:]. 到目前为止的语句给了我们一个内存中的新列表,[1:]看起来像一个列表索引符号,它是——有点!这个扩展的索引符号给了我们一个列表 slice。在这种情况下,我们取 index 处的元素1及其后的所有元素,丢弃 index 处的元素0。

总之,我们遍历一个字符串列表,其中每个元素代表多行输入字符串中除了第一行之外的每一行。

在每个字符串中,我们.split()再次调用using,作为拆分字符,但这次我们只使用maxsplit前两个逗号进行拆分,而地址保持不变。然后我们将该调用的结果附加到恰当命名的results数组并将其返回给调用者。

连接和连接字符串


另一个基本的字符串操作与拆分字符串相反:字符串 连接 。如果你没见过这个词,别担心。这只是说“粘合在一起”的一种奇特方式。

与+运算符连接

有几种方法可以做到这一点,具体取决于您要实现的目标。最简单和最常用的方法是使用加号 ( +) 将多个字符串相加。只需将 a 放在+您想要连接在一起的任意数量的字符串之间:

‘a’ + ‘b’ + ‘c’

‘abc’

为了与数学主题保持一致,您还可以将字符串相乘以重复它:

‘do’ * 2

‘dodo’

请记住,字符串是不可变的!如果连接或重复存储在变量中的字符串,则必须将新字符串分配给另一个变量以保留它。

orig_string = ‘Hello’

orig_string + ‘, world’

‘Hello, world’

orig_string

‘Hello’

full_sentence = orig_string + ‘, world’

full_sentence

‘Hello, world’

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

n/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值