逐个单词遍历字符串

44
我想知道如何逐个单词地遍历字符串。
string = "this is a string"
for word in string:
    print (word)

上面的代码将会输出:
t
h
i
s

i
s

a

s
t
r
i
n
g

但我需要以下输出结果:
this
is
a
string

相当相关的之前问题(虽然不是完全重复)是https://dev59.com/eW025IYBdhLWcg3wKCf- - paisanco
7个回答

89

当你这样做 -

for word in string:

你没有遍历字符串中的单词,而是遍历了字符串中的每个字符。要遍历单词,你需要首先使用 str.split() 将字符串拆分成单词,然后遍历它们。例如 -

my_string = "this is a string"
for word in my_string.split():
    print (word)
请注意,str.split()方法如果没有传入任何参数,则按所有空白字符(空格、多个空格、制表符、换行符等)分割字符串。

嘿,有什么方法可以保留所有的空格并做相同的事情吗? - m0bi5
2
@MohitBhasi 也许你理解错了?str.split()并不是原地操作,它只是返回拆分后的字符串列表,原始字符串仍然保持不变。 - Anand S Kumar

10

这是一种方法:

string = "this is a string"
ssplit = string.split()
for word in ssplit:
    print (word)

输出:

this
is
a
string

2
for word in string.split():
    print word

3
你应该解释一下 split 方法,不要期望每个人都知道它的作用或者你为什么使用它。 - jpaugh
5
我的评论很简短,但并不是要冒犯你。我只是希望 [so] 能够变得更好。仅包含代码的答案难以阅读和理解,特别是对于那些对你来说显而易见的东西“一无所知”的人来说。这就是为什么他们在这里寻找答案的原因。 - jpaugh

2
使用nltk
from nltk.tokenize import sent_tokenize, word_tokenize
sentences = sent_tokenize("This is a string.")
words_in_each_sentence = word_tokenize(sentences)

你可以使用TweetTokenizer来解析带有表情符号等非正式文本。

0
一种方法是使用字典。上面的代码问题在于它计算字符串中的每个字母,而不是每个单词。为了解决这个问题,您应该首先使用split()方法将字符串转换为列表,然后创建一个变量来计算列表中每个逗号作为其自己的值。下面的代码以字典形式返回字符串中每个单词出现的次数。
    s = input('Enter a string to see if strings are repeated: ')
    d = dict()
    p = s.split()
    word = ','
    for word in p:
        if word not in d:
            d[word] = 1
        else:
            d[word] += 1
    print (d)

-2

你也可以尝试这种方法:

sentence_1 = "这是一个字符串"

list = sentence_1.split()

for i in list:

print (i)


1
这是与此其他答案相同的解决方案。 - Eric Aya
1
这个解决方案与其他答案相同,没有解释它是如何或为什么工作的。此外,“list”作为变量名的使用是一种危险的做法,因为它会遮蔽内置名称并导致意外结果。 - drowningincode

-2
s = 'hi how are you'
l = list(map(lambda x: x,s.split()))
print(l)

输出: ['hi', 'how', 'are', 'you']


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