Python字符串的拆分与连接详解

目录
  • 拆分字符串
    • 无参数拆分
    • 指定分隔符
    • 使用 Maxsplit 限制拆分
  • 连接和连接字符串
    • 与+运算符连接
    • 在 Python 中从列表到字符串 .join()

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

由于字符串数据几乎无处不在,因此掌握有关字符串的交易工具非常重要。幸运的是,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'

如果我们没有不可变的字符串,full_sentence则会输出'Hello, world, world'.

另一个注意事项是 Python 不进行隐式字符串转换。如果您尝试将字符串与非字符串类型连接起来,Python将引发一个TypeError:

>>>
>>> 'Hello' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int

这是因为您只能将字符串与其他字符串连接起来,如果您来自像 JavaScript 这样试图进行隐式类型转换的语言,这对您来说可能是一种新行为。

在 Python 中从列表到字符串 .join()

还有另一种更强大的方法可以将字符串连接在一起。您可以使用该join()方法从 Python 中的列表转换为字符串。

这里的常见用例是当您有一个由字符串组成的可迭代对象(如列表),并且您希望将这些字符串组合成一个字符串时。就像.split(),.join()是一个字符串实例方法。如果您所有的字符串都在一个可迭代对象中,您会调用哪一个.join()?

这是一个有点棘手的问题。请记住,当您使用 时.split(),您将在要拆分的字符串或字符上调用它。相反的操作是.join(),因此您可以在要用于将可迭代字符串连接在一起的字符串或字符上调用它:

>>>
>>> strings = ['do', 're', 'mi']
>>> ','.join(strings)
'do,re,mi'

在这里,我们strings用逗号 ( ,)连接列表的每个元素,并调用.join()它而不是strings列表。

练习:“通过加入提高可读性”显示隐藏

如何使输出文本更具可读性?

解决方案:“通过加入提高可读性”显示隐藏

您可以做的一件事是添加间距:

>>>
>>> strings = ['do', 're', 'mi']
>>> ', '.join(strings)
'do, re, mi'

通过在我们的连接字符串中添加一个空格,我们大大提高了输出的可读性。在加入字符串以提高可读性时,您应该始终牢记这一点。

.join()很聪明,因为它将您的“joiner”插入到您想要加入的可迭代的字符串之间,而不是仅仅在可迭代的每个字符串的末尾添加您的joiner。这意味着,如果您传递 size 的迭代1,您将看不到您的加入者:

>>>
>>> 'b'.join(['a'])
'a'

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

使用我们的网页抓取教程,您已经构建了一个很棒的天气抓取工具。但是,它会在列表列表中加载字符串信息,每个列表都包含要写出到 CSV 文件的唯一信息行:

[
    ['Boston', 'MA', '76F', '65% Precip', '0.15 in'],
    ['San Francisco', 'CA', '62F', '20% Precip', '0.00 in'],
    ['Washington', 'DC', '82F', '80% Precip', '0.19 in'],
    ['Miami', 'FL', '79F', '50% Precip', '0.70 in']
]

您的输出应该是如下所示的单个字符串:

"""
Boston,MA,76F,65% Precip,0.15in
San Francisco,CA,62F,20% Precip,0.00 in
Washington,DC,82F,80% Precip,0.19 in
Miami,FL,79F,50% Precip,0.70 in
"""

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

对于此解决方案,我使用了列表推导式,这是 Python 的一项强大功能,可让您快速构建列表。如果您想了解更多关于它们的信息,请查看这篇涵盖 Python 中所有可用推导式的精彩文章。

以下是我的解决方案,以列表列表开始并以单个字符串结尾:

input_list = [
    ['Boston', 'MA', '76F', '65% Precip', '0.15 in'],
    ['San Francisco', 'CA', '62F', '20% Precip', '0.00 in'],
    ['Washington', 'DC', '82F', '80% Precip', '0.19 in'],
    ['Miami', 'FL', '79F', '50% Precip', '0.70 in']
]

# We start with joining each inner list into a single string
joined = [','.join(row) for row in input_list]

# Now we transform the list of strings into a single string
output = '\n'.join(joined)

print(output)

这里我们.join()不是用一次,而是用了两次。首先,我们在列表推导中使用它,它将每个内部列表中的所有字符串组合成一个字符串。接下来,我们将每个字符串与\n我们之前看到的换行符连接起来。最后,我们简单地打印结果,以便我们可以验证它是否符合我们的预期。 

到此这篇关于Python字符串的拆分与连接详解的文章就介绍到这了,更多相关Python字符串拆分与连接内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python字符串连接的N种方式总结

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 str2 % 连接字符串:'name:%s; sex: ' % ('tom', 'male') 字符串列表连接:str.join(some_list) 第一种,想必只要是有编程经验的人,估计都知道,直接用 "+" 来连接两个字符串: 'Jim' + 'Green' = 'JimGreen' 第

  • Python split() 函数拆分字符串将字符串转化为列的方法

    函数:split() Python中有split()和os.path.split()两个函数,具体作用如下: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) os.path.split():按照路径将文件名和路径分割开 一.函数说明 1.split()函数 语法:str.split(str="",num=string.count(str))[n] 参数说明: str: 表示为分隔符,默认为空格,但是不能为空('').若字符串中没有分隔符

  • python实现字符串完美拆分split()的方法

    函数:split() 例子 我们想要将以下字符串rule进行拆分.字符串表示的是一个规则,由"-"得到"-".我们需要将规则中的条件属性与取值分别提取出来,存放在条件属性列表cf_list与值列表cv_list中,规则的结论的属性与取值也提取出来,分别存放结果属性列表rf_list与值列表rc_list. rule = '{age=Middle-aged,sex=Male,education=Bachelors}=>{native-country=United

  • python字符串连接方法分析

    本文实例分析了python字符串连接方法.分享给大家供大家参考,具体如下: python字符串连接有几种方法,把大家可能用到的列出来,第一个方法效率是最低的,另外给大家介绍后面的 2种效率高的方法,希望对大家有帮助. 先介绍下效率比较低的,有些新手朋友就会犯这个错误: a = ['a','b','c','d'] content = '' for i in a: content = content + i print content 说下为什么效率会低呢? 原因:在循环连接字符串的时候,他每次连接

  • python连接字符串的方法小结

    本文实例讲述了python连接字符串的方法.分享给大家供大家参考.具体如下: 方法1:直接通过加号操作符相加 复制代码 代码如下: foobar = 'foo' + 'bar' 方法2:join方法 复制代码 代码如下: list_of_strings = ['abc', 'def', 'ghi'] foobar = ''.join(list_of_strings) 方法3:替换 复制代码 代码如下: foobar = '%s, %s' % ('abc', 'def') 希望本文所述对大家的py

  • Python中拆分字符串的操作方法

    使用字符串时,常见的操作之一是使用给定的分隔符将字符串拆分为子字符串数组.在本文中,我们将讨论如何在Python中拆分字符串. .split()方法 在Python中,字符串表示为不可变的str对象. str类带有许多字符串方法,允许您操作字符串. .split()方法返回由分隔符分隔的子字符串列表. 它采用以下语法: str.split(delim=None, maxsplit=-1) 分隔符可以是字符或字符序列,而不是正则表达式. 在下面的示例中,字符串s将使用逗号分隔,作为分隔符. s =

  • python如何拆分含有多种分隔符的字符串

    案例: 把某个字符串依据分隔符拆分,该字符包含不同的多种分隔符,如下 s = '12;;7.osjd;.jshdjdknx+' 其中 ; . + 是分隔符 有哪些解决方案? 方法1:通过str.split()方法,每次处理一个分隔符 #!/usr/bin/python3 def go_split(s, symbol): result = [s] for i in symbol: median = [] # 普通方法 # for x in result: # median.extend(x.spl

  • Python连接字符串过程详解

    这篇文章主要介绍了python连接字符串过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python中,如果有多个字符串,想要连接在一起,或者说想要拼接在一起该如何操作,在此记录下. 1.通过 + 这个加号操作符,将字符串拼接在一起 >>> "First" + "Python" + "Lesson" 'FirstPythonLesson' >>> &

  • python字符串连接方式汇总

    在python中有很多字符串连接方式,今天就在这里具体总结一下: ①.最原始的字符串连接方式:str1 + str2 ②.python 新字符串连接语法:str1, str2 ③.奇怪的字符串方式:str1 str2 ④.% 连接字符串:'name:%s; sex: ' % ('tom', 'male') ⑤.字符串列表连接:str.join(some_list) 下面具体分析一下: 第一种,想必只要是有编程经验的人,估计都知道,直接用 "+" 来连接两个字符串: 'Jim' + 'G

  • Python字符串的拆分与连接详解

    目录 拆分字符串 无参数拆分 指定分隔符 使用 Maxsplit 限制拆分 连接和连接字符串 与+运算符连接 在 Python 中从列表到字符串 .join() 生活中几乎没有什么保证:死亡.税收和需要处理字符串的程序员.字符串可以有多种形式.它们可以是非结构化文本.用户名.产品描述.数据库列名称,或者我们使用语言描述的任何其他内容. 由于字符串数据几乎无处不在,因此掌握有关字符串的交易工具非常重要.幸运的是,Python 使字符串操作变得非常简单,尤其是与其他语言甚至旧版本的 Python 相

  • Python字符串格式化%s%d%f详解

    关于讨论输出格式化的问题,小编不是一时兴起,之前学习python的时候就经常遇到输出时"%d",一直没有仔细学习,今天又看到了,下面分享一个简单实例,python输出99乘法表: #!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(1, 10): print for j in range(1, i+1): print "%d*%d=%d" % (i, j, i*j), 结果: 1*1=1 2*1=2 2*

  • 对json字符串与python字符串的不同之处详解

    API的应用通常会处理json数据,刚好今天看到了json字符串和python字符串的区别,放一段代码,区别一下子就看出来,的确json 库为处理Json 数据提供了不少的便利. import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit&quo

  • python字符串切片及常用方法示例详解

    目录 一.切片 二.常用方法 2.1 查找 2.2 修改 2.3 判断 一.切片 切片:指对操作的对象截取其中一部分的操作,字符串.列表.元组都支持切片操作 语法:序列[开始位置下标:结束位置下标:步长] ,不包含结束位置下标数据,步长为选取间隔,正负均可,默认为1 举例如下: str = 'abcdefg_a' print(str[1:6:2], str[2:6], str[:3], str[3:], str[:]) print(str[::2], str[:-2], str[-6:-2],

  • python字符串查找函数的用法详解

    python字符串查找函数的使用 打开Python开发工具IDLE,新建'findstr.py'文件,并写代码如下: s ='/ab/bx,.s' print (s.find('/x')) 注意find是匹配子字符串,而不是匹配第一个字符 F5运行程序,打印出-1,代表没有找到'/x'子字符串 修改代码如下,查找'/b'子字符串 s ='/ab/bx,.s' print (s.find('/b')) F5运行程序,打印出3,代表'/b'子字符串起始索引是3 find是从左到右查找,默认从起始位置

  • Python字符串的全排列算法实例详解

    本文实例讲述了Python字符串的全排列算法.分享给大家供大家参考,具体如下: 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 注意有可能重复,因此需要判断 注意list的append方法和list的+方法的区别 append方法在list后面添加元素 +方法在list后面添加l

  • Python字符串及文本模式方法详解

    一.你想在字符串中搜索和匹配指定的文本模式 遗漏点:re模块其实也是帮助我们进行字符串处理的重要工具,我之前总是想着用内建的函数来处理,其实如果是复杂的文本和数据结构,re模块能帮助我们处理很多信息. 对于简单的字面模式,直接使用 str.replace() 方法即可,比如: >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> text.replace('yeah', 'yep') 'yep, but no

  • Python中关于元组 集合 字符串 函数 异常处理的全面详解

    目录 元组 集合 字符串 1.字符串的驻留机制 2.常用操作 函数 1.函数的优点: 2.函数的创建:def 函数名([输入参数]) 3.函数的参数传递: 4.函数的返回值: 5.函数的参数定义: 6.变量的作用区域 7.递归函数:函数体内套用该函数本身 8.将函数存储在模块中 9.函数编写指南: Bug 1.Bug常见类型 2.常见异常类型 3.python异常处理机制 pycharm开发环境的调试 编程思想 (1)两种编程思想 (2)类和对象的创建 元组 元组是不可变序列 多任务环境下,同时

  • 基于Python的Android图形解锁程序详解

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不想引起其警觉的话--你可以参考一下本文(前提条件:手机需要root,而且打开调试模式.一般来讲,如果用过诸如"豌豆荚手机助手"."360手机助手"一类的软件,都会被要求打开调试模式的.如果要删除手机内置软件,则需要将手机root). 首先科普一下,安卓手机是如何标记这9

  • python中的subprocess.Popen()使用详解

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* 一.subprocess.Popen subprocess模块定义了一个类: Popen class subprocess.Popen( args, bufsize=0, executable

随机推荐