使用索引切片打印字符串中的每个单词

时间:2019-01-10 05:59:34

标签: python python-3.x string

我想使用索引切片将word = "They stumble who run fast"中的每个单词打印在新行上。

我尝试使用while循环,例如在每个空格后打印单词

word = "They stumble who run fast"
space = word.count(' ')
start = 0
while space != -1:
   print(word[start:space])

结果应该是这样的:

They
stumble
who
run
fast

4 个答案:

答案 0 :(得分:3)

如果您绝对需要使用索引切片:

word = "They stumble who run fast"

indexes = [i for i, char in enumerate(word) if char == ' ']

for i1, i2 in zip([None] + indexes, indexes + [None]):
    print(word[i1:i2].strip())

输出:

They
stumble
who
run
fast

但是为什么不使用.split()

word = "They stumble who run fast"
print(*word.split(), sep='\n')

输出:

They
stumble
who
run
fast

答案 1 :(得分:1)

我想我知道这个问题是什么原因(edx类..我碰到同样的事情)。此解决方案对我很有效,使用了一些鼓励学生在课程中此时使用的作品:

quote = "they stumble who run fast"
start = 0
space_index = quote.find(" ")
while space_index != -1:
    print (quote[start:space_index])
    start = space_index+1
    space_index = quote.find(" ", space_index+1)
else:
    print (quote[start::1])

答案 2 :(得分:0)

显而易见的解决方案是使用str.split,但这会违反您的切片意愿:

for w in word.split():
    print(w)

更好的方法可能是跟踪当前空间的索引并继续寻找下一个索引。这可能与您所想的相似,但是循环不会更新且不会更改:

start = 0
try:
    while True:
        end = word.index(' ', start)
        print(word[start:end])
        start = end + 1
except ValueError:
    print(word[start:])

可能也不可接受的快捷方式,但是会产生所需的输出:

print(word.replace(' ', '\n'))

答案 3 :(得分:0)

不确定为什么有人会想这样做而不是仅仅使用str.split(),但这是您最初刺中的另一种(相当丑陋的)方式。

word = "They stumble who run fast"
while ' ' in word:
    i = word.index(' ')
    print(word[:i])
    word = word[i+1:]
print(word)

# OUTPUT
# They
# stumble
# who
# run
# fast