在《Python for children》中,下一个练习是:
了解如何将字符串分解为单词,然后创建一个小程序,从第一个单词开始,每隔一个单词打印一次下面的字符串。
这里有一个如何解决的例子:
s = 'this if is you not are a reading very this good then way you to have hide done a it message wrong'
l = s.split()
for x in range(0, len(l), 2):
print(l[x])
但我不喜欢输出:
this
is
not
a
very
good
way
to
hide
a
message
所以…我在前一章的基础上做了以下表达:
print(' '.join(l[::2]))
但是我对以下内容感兴趣:如何制作for循环,这样您就可以获得包含所有所需单词的变量,而不必逐个显示。也许这应该通过函数来完成?
要获得每一秒的单词,必须将其拆分并使用每一秒元素
sentence = 'Something from which I want every second word'
words = sentence.split()
这是现在的单词列表,以获得每秒钟一个使用
every_second_word = [word for word in words[::2]]
要从中输出字符串,只需使用join。
' '.join(every_second_word)
单行
' '.join([word for word in sentence.split()[::2]])
这可以用for循环来完成,是的。单向:
l2 = []
for x in range(0, len(l), 2):
l2.append(l[x])
这将把l
的偶数元素添加到l2
,一次添加一个。
然而,有更好的方法可以做到这一点缓慢而不"Python"。一个更好的方法,正如几位评论者,是使用切片:
l2 = l[::2]
读一读,但简单地说,这意味着l
的一部分,从从开始到结束,以2为单位。例如,如果您想要切片从1开始,直到但不包括7,乘以2,即:
l[1:7:2]
另一种方法是列表理解:
l2 = [l[i] for i in range(0, len(l), 2)]
列表理解是构建新列表的一种强大而简洁的方法来自旧列表。你会在课本上找到它们;学习并使用他们