Python分区和拆分

时间:2014-02-05 03:53:58

标签: python string python-2.7 split partition

我希望使用拆分和分区分割带有两个单词的字符串,如“word1 word2”,并分别打印(使用for)单词,如:

Partition:
word1
word2

Split:
word1
word2

这是我的代码:

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(" ")

这种情况正在发生:

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

Separation with split: 
['word1', 'word2']
['word1', 'word2']

3 个答案:

答案 0 :(得分:23)

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

first, middle, rest = name.partition(" ")
print first, rest

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

print name.split(" ")

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

name = "word1 word2 word3"
print name.split(" ")          # ['word1', 'word2', 'word3']

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

name = "word1 word2 word3"
print name.split(" ", 1)       # ['word1', 'word2 word3']

但是,如果您尝试根据空白字符进行拆分,则不必传递" "。你可以简单地做

name = "word1 word2 word3"
print name.split()            # ['word1', 'word2', 'word3']

如果您想限制分割数量,

name = "word1 word2 word3"
print name.split(None, 1)     # ['word1', 'word2 word3']

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

split documentation

引用
  

如果未指定sep或为None,则使用不同的拆分算法   applied:连续空格的运行被视为单个   分隔符,结果将在开始时不包含空字符串   或者如果字符串具有前导或尾随空格则结束。所以,   拆分空字符串或只包含空格的字符串   使用无分隔符返回[]。

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

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

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

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

print "Split:"
print "\n".join(name.split())

答案 1 :(得分:15)

name.split()之类的命令会返回一个列表。您可以考虑迭代该列表:

for i in name.split(" "):
  print i

因为你写的东西,即

for i in train:
  print name.split(" ")

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

['word1', 'word2']
['word1', 'word2']

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

print name.partition(" ")[0:3:2]
# or
print name.partition(" ")[0::2]

返回元素02。或者,您可以

train = (0, 2,)
for i in train:
  print name.partition(" ")[i]

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

train = (0,2,)
part = name.partition(" ")
for i in train:
  print part[i]

答案 2 :(得分:0)

partition()方法在第一次出现分隔符时将字符串分割,并返回一个元组,其中包含分隔符之前的部分,分隔符和分隔符之后的部分。

string =“迪帕克(Deepak)是一个好人,普雷蒂(Preeti)也不是一个好人。 //首次出现'is'分隔符 print(string.partition('is'))

输出:

(“迪帕克”,“是”,“好人,普雷蒂不是好人。”)

然后, string =“迪帕克(Deepak)是一个好人,普雷蒂(Preeti)也不是一个好人。” //每次出现“ is”分隔符 print(string.partition('is'))

输出:

(“ Deepak”,“是”,“一个好人和Preeti”,“是”,“一个不好的人。”)

简而言之,split会在给定参数出现时拆分字符串,而partition只会在给定参数第一次出现时拆分字符串,并会返回一个以给定参数为中间值的三元组。