Python分割和拆分

15
我想使用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']

2
这篇文章对于参考很有用,但我完全不知道 OP 在想什么“问题”。 - Karl Knechtel
2个回答

31

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']

注意:如果在split中使用None或者未指定参数,就会发生以下情况

引用自split文档

如果未指定分隔符sep或者将其设置为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

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

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

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

22

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时也会发生类似的事情,但它会返回你分割的元素。因此在这种情况下,你可能想要执行:

A similar thing happens with partition - except it returns the element that you split as well. So in that case you might want to do

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]

嗨Floris,这行代码意味着什么?“除此之外还返回你拆分的元素”?.partition(sep) 返回 firstseptail,对吧? - Rikka
是的 - 我的意思是第二个元素是sep,你可能不想打印它。 - Floris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接