这篇教程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,AddressMike Smith,15554218841,123 Nice St, Roy, NM, USAAnita Hernandez,15557789941,425 Sunny St, New York, NY, USAGuido 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,AddressMike Smith,15554218841,123 Nice St, Roy, NM, USAAnita Hernandez,15557789941,425 Sunny St, New York, NY, USAGuido 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 resultsprint(string_split_ex(input_string)) 我们.split()在这里打了两次电话。第一次使用可能看起来很吓人,但别担心!我们将逐步完成它,您会对这些表达式感到满意。让我们再看看第一个.split()调用:unsplit.split('/n')[1:]. 第一个元素是unsplit,它只是指向输入字符串的变量。然后我们有我们的.split()电话:.split('/n')。在这里,我们正在拆分一个称为换行符的特殊字符。 有什么作用/n?顾名思义,它告诉正在读取字符串的任何人,它后面的每个字符都应该显示在下一行。在像我们这样的多行字符串中,每行末尾input_string都有一个隐藏/n。 最后一部分可能是新的:[1:]. 到目前为止的语句给了我们一个内存中的新列表,[1:]看起来像一个列表索引符号,它是 Python python不等于运算符的具体使用 |