拆分字符串在Python中,字符串被表示为str对象,它们是不可变的:这意味着对象在内存中的表示不能直接改变。这两个事实可以帮助您学习(然后记住)如何使用.split()。你有没有猜到字符串的这两个属性与Python中的split函数有什么关系?如果您猜到.split()是一个实例方法,因为字符串是一种特殊类型,那么您是对的!在其他一些语言中,例如Perl,原始字符串用作独立.split()函数的输入,而不是对字符串本身调用的方法。注意:调用字符串方法的方法(如字符串方法.split())在这里主要作为对字符串调用的实例方法出现。它们也可以称为静态方法,但这并不理想,因为它更“冗长”。为了完整起见,这里有一个示例:#避免这样:str.split('a,b,c',',')当您将它与首选用法进行比较时,这是笨拙和笨拙的:#改为这样做:'a,b,c'.split(',')有关Python中的实例、类和静态方法的更多信息,请查看我们的深入教程。字符串不变性呢?这应该提醒您,字符串方法不是就地操作,而是在内存中返回一个新对象。注意:就地操作就地操作是直接更改调用它们的对象的操作。一个常见的例子是用在列表上的.append()方法:当你调用一个列表时,你通过将输入添加到同一个列表来直接改变列表。.append().append()无参数拆分在我们继续之前,让我们看一个简单的例子:>>>'thisismystring'.split()['this','is','my','string']这实际上是.split()调用的一个特例,我选择它是为了它的简单性。在不指定任何分隔符的情况下,.split()会将任何空格计为分隔符。对.split()的裸调用的另一个特性是它会自动删除前导和尾随空格,以及连续的空格。比较在以下字符串上调用时没有定界符参数的.split()和使用''作为定界符参数的调用:>>>s='thisismystring'>>>s.split()['this','is','my','string']>>>s.split('')['','this','','','is','','my','string','']首先要注意的是,这证明了Python中字符串的不变性:对.split()的后续调用处理原始字符串,而不是对.split()的第一次调用。您应该看到第二个也是最主要的事情是裸.split()调用提取句子中的单词并丢弃所有空格。另一方面,指定separator.split('')更符合字面意思。当有前导或尾随定界符时,您将得到一个空字符串,您可以在结果列表的第一个和最后一个元素中看到它。如果有多个连续的定界符(例如“this”和“is”之间以及“is”和“my”之间),第一个将用作定界符,随后的定界符将作为空字符串进入结果列表。注意:调用.split()时的分隔符尽管上面的示例使用单个空格字符作为输入.split()的分隔符,但对用作分隔符的字符类型或字符串长度没有限制。唯一的要求是您的定界符是一个字符串。您可以使用从“...”到“分隔符”的任何内容。使用Maxsplit.split()限制拆分有另一个可选参数,称为maxsplit。默认情况下,.split()将在调用时进行所有可能的拆分。但是,当您为maxsplit赋值时,只会进行给定数量的拆分。使用我们之前的示例字符串,我们可以看到maxsplit:>>>s="thisismystring">>>s.split(maxsplit=1)['this','ismystring']如上所示,如果你将maxsplit设置为1,第一个空格将用作分隔符,其余的将被忽略。让我们做一些练习来测试我们到目前为止所学的一切。练习:“自己尝试一下:Maxsplit”showhide当您将负数作为maxsplit参数时会发生什么?解决方法:“自己试一试:Maxsplit”显示隐藏。split()将在所有可用的分隔符上拆分您的字符串,这也是未设置maxsplit时的默认行为。练习:部分理解检查显示隐藏您最近收到一个格式非常糟糕的逗号分隔值(CSV)文件。您的工作是将每一行提取到一个列表中,其中的每个元素代表文件的一列。是什么让它畸形?“地址”字段包含多个逗号,但需要在列表中表示为单个元素!假设您的文件作为以下多行字符串加载到内存中:Name,Phone,AddressMikeSmith,15554218841,123NiceSt,Roy,??NM,USAAnitaHernandez,15557789941,425SunnySt,NewYork,NY,USAGuidovanRossum,315558730,SciencePark123,1098XGAmsterdam,NL您的输出应该是一个列表:[['MikeSmith','15554218841','123NiceSt,Roy,??NM,USA'],['AnitaHernandez','15557789941','425SunnySt,NewYork,NY,USA'],['GuidovanRossum','315558730','SciencePark123,1098XGAmsterdam,NL']]每个内部列表代表我们对CSV行感兴趣的内容,而外部列表将它们放在一起。解决方案:“部分理解检查”ShowHide这是我的解决方案。有几种方法可以攻击它。重要的是你.split()它的所有可选参数并获得预期的输出:input_string="""Name,Phone,AddressMikeSmith,15554218841,123NiceSt,Roy,??NM,USAAnitaHernandez,15557789941,425SunnySt,NewYork,NY,USAGuidovanRossum,315558730,SciencePark123,1098XGAmsterdam,NL"""defstring_split_ex(unsplit):results=[]#Bonuspointsforusingsplitlines()hereinstead,#这会更多unsplit.split('\n')[1:]中的行可读:调用results.append(line.split(',',maxsplit=2))returnresultsprint(string_split_ex(input_string))us.split()在这里两次。第一次来可能有点吓人,但别担心!我们将逐步完成它,您会对这些表达式感到满意。让我们再看看第一个.split()调用:unsplit.split('\n')[1:]。第一个元素是未拆分的,它只是一个指向输入字符串的变量。然后我们进行.split()调用:.split('\n')。在这里,我们在一个叫做换行符的特殊字符上进行拆分。它有什么作用\n?顾名思义,它告诉任何正在阅读该字符串的人它之后的每个字符都应该出现在下一行。在像我们这样的多行字符串中,input_string在每行的末尾都有一个隐藏的\n。最后一部分可能是新的:[1:]。到目前为止,该语句在内存中为我们提供了一个新列表,并且[1:]看起来像一个列表索引符号,有点像!这个扩展索引符号给了我们一个列表切片。在这种情况下,我们采用索引处的元素1及其之后的所有元素,丢弃索引处的元素0。总之,我们迭代了一个字符串列表,其中每个元素代表多行输入字符串的每一行,除了第一行。在每个字符串中,我们再次调用.split()using,作为分割字符,但是这次我们只使用maxsplit的前两个逗号进行分割,地址保持不变。然后,我们将该调用的结果附加到恰当命名的结果数组中,并将其返回给调用者。拼接和连接字符串另一个基本的字符串操作与拆分字符串相反:字符串拼接。如果您还没有看到这个术语,请不要担心。这只是“粘在一起”的一种奇特说法。使用+运算符连接有多种方法可以执行此操作,具体取决于您要实现的目标。最简单和最常用的方法是使用加号(+)将多个字符串相加。只需将abetween+任意数量的字符串连接在一起即可:>>>'a'+'b'+'c''abc'为了与数学主题保持一致,您还可以将Stringsaremultiplied重复:>>>'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'+2Traceback(mostrecentcalllast):File"
