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 “”, line 1, in
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列表。
练习:“通过加入提高可读性”显示隐藏
如何使输出文本更具可读性?
解决方案:“通过加入提高可读性”显示隐藏
您可以做的一件事是添加间距:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!