Python分区和拆分

Mar*_*aes 11 python string split python-2.7 partition

我想分割一个字符串,其中包含两个单词,如"word1 word2",使用分割和分区,并分别打印(使用for)单词,如:

Partition:
word1
word2

Split:
word1
word2
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

print("Hello World")
name = raw_input("Type your name: ")

train = 1,2
train1 = 1,2
print("Separation with partition: ")
for i in train1:
    print name.partition(" ")

print("Separation with split: ")
for i in train1:
    print name.split(" ")
Run Code Online (Sandbox Code Playgroud)

发生这种情况:

Separation with partition: 
('word1', ' ', 'word2')
('word1', ' ', 'word2')

Separation with split: 
['word1', 'word2']
['word1', 'word2']
Run Code Online (Sandbox Code Playgroud)

the*_*eye 24

str.partition返回三个元素的元组.分区字符串之前的字符串,分区字符串本身和字符串的其余部分.所以,它必须像这样使用

first, middle, rest = name.partition(" ")
print first, rest
Run Code Online (Sandbox Code Playgroud)

要使用str.split,您可以像这样打印分割的字符串

print name.split(" ")
Run Code Online (Sandbox Code Playgroud)

但是,当你这样调用它时,如果字符串有多个空格字符,你将获得两个以上的元素.例如

name = "word1 word2 word3"
print name.split(" ")          # ['word1', 'word2', 'word3']
Run Code Online (Sandbox Code Playgroud)

如果只想拆分一次,可以指定要拆分的次数作为第二个参数,如下所示

name = "word1 word2 word3"
print name.split(" ", 1)       # ['word1', 'word2 word3']
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试基于空白字符进行拆分,则不必通过" ".你可以干脆做

name = "word1 word2 word3"
print name.split()            # ['word1', 'word2', 'word3']
Run Code Online (Sandbox Code Playgroud)

如果要限制分割数量,

name = "word1 word2 word3"
print name.split(None, 1)     # ['word1', 'word2 word3']
Run Code Online (Sandbox Code Playgroud)

注意:使用Nonein split或不指定参数,就会发生这种情况

引用拆分文档

如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾处不包含空字符串.因此,将空字符串或仅由空格组成的字符串拆分为None分隔符将返回[].

所以,你可以像这样改变你的程序

print "Partition:"
first, middle, rest = name.partition(" ")
for current_string in (first, rest):
    print current_string

print "Split:"
for current_string in name.split(" "):
    print current_string
Run Code Online (Sandbox Code Playgroud)

或者你可以使用这样的str.join方法

print "Partition:"
first, middle, rest = name.partition(" ")
print "\n".join((first, rest))

print "Split:"
print "\n".join(name.split())
Run Code Online (Sandbox Code Playgroud)


Flo*_*ris 16

像命令一样name.split()返回一个列表.您可以考虑迭代该列表:

for i in name.split(" "):
  print i
Run Code Online (Sandbox Code Playgroud)

因为你写的东西,即

for i in train:
  print name.split(" ")
Run Code Online (Sandbox Code Playgroud)

将执行print name.split(" ")两次命令(一次用于值i=1,一次用于i=2).两次它将打印出整个结果:

['word1', 'word2']
['word1', 'word2']
Run Code Online (Sandbox Code Playgroud)

类似的事情发生在partition- 除了它返回你分裂的元素.所以在这种情况下你可能想做

print name.partition(" ")[0:3:2]
# or
print name.partition(" ")[0::2]
Run Code Online (Sandbox Code Playgroud)

返回元素02.或者,你可以做到

train = (0, 2,)
for i in train:
  print name.partition(" ")[i]
Run Code Online (Sandbox Code Playgroud)

在连续两次通过循环中打印元素0和2.请注意,后一个代码效率更低,因为它计算分区两次.如果你关心,你可以写

train = (0,2,)
part = name.partition(" ")
for i in train:
  print part[i]
Run Code Online (Sandbox Code Playgroud)