我如何获得字符串中的每个第二个单词,包括第一个?

时间:2019-03-22 22:28:04

标签: python

定义一个名为print_skip的函数,该函数接受字符串并从字符串的第一个单词开始打印出字符串中的每个第二个单词。单词被视为由空格与其他字母分隔的任何字母序列。您可能会假设字符串作为参数传递。

那是我遇到的问题。

我尝试将其放在列表中并从那里建立索引,并且效果很好,并且通过了该网站提供的大部分测试,唯一通过的是。

print_skip('Hello world!\ nHow \ nare \ nyou!'),例外的输出是Hello How you。当这种情况发生时,我的代码就会崩溃

def print_skip(text):
only_letters = ''
new_words = []
for c in text:
    if(c.isalpha() or c==' '):
        only_letters += c
for x in only_letters.split():
    new_words.append(x)
for i in range(0,len(new_words)+1,2):
    print(new_words[i])

testing error

my code so far

this is the original question

3 个答案:

答案 0 :(得分:4)

因此python中的字符串实际上使您可以像列表一样索引它们。这是一个示例:

>>> myString = "How are You?  Where are you from?"

>>> breakUp = myString.split()

>>> breakUp[::2] #This 2 represents step size, so ever 2nd word will be called. 


['How', 'You?', 'are', 'from?']

请注意,这包括第一个单词。

附录:因此,仅在此处使用split()是不够的。我看了上面的示例,转义字符在字符串中。我认为处理字符串中转义字符的可行解决方案只是用''代替它们。这是一个示例:

myFixedString = "'Hello world!\nHow\nare\nyou!".replace('\n', ' ')
printSkip(myFixedString)

答案 1 :(得分:0)

使用for循环和模的解决方案:

sentence = '1 2 3 4 5 6 7\n8 9 10'
words = sentence.split()
for i in range(len(words)):
    if i % 2 == 1:            # is true on uneven numbers, e.g. index 1, index 3, index 5
        print(words[i])

>>>2
>>>4
>>>6
>>>8
>>>10

可以将其重构为列表理解,如下所示:

sentence = '1 2 3 4 5 6 7\n8 9 10'
words = sentence.split()
[print(words[i]) if i % 2 == 1 else None for i in range(len(words))]

答案 2 :(得分:0)

您可以使用regex和re.sub删除字符串中每个奇数词的所有非字母字符。

import re

def print_skip(text):
    if not text:
        return
    regex = re.compile('[^a-zA-Z]')
    for index, word in enumerate(text.split()):
        if index % 2 == 0:
            print(regex.sub('', word))

不使用正则表达式的方法:

def print_skip(text):
    words = text.split()
    for index, word in enumerate(words):
        if not word.isalpha():
            clean_word = ''
            for i in range(len(word)):
                if word[i].isalpha():
                    clean_word += word[i]
            words[index] = clean_word
        if index % 2 == 0:
            print(words[index])