我有这个任务。
st = 'print only the words that sstart with an s in the sstatement'
,解决方案将是
for word in st.split():
if word[0] == 's':
print word
为什么不能使用
for word in st.split():
if word[1] == 's':
print word
我有点理解零代表什么,但我怎么能用第二个字母打印这些单词'。
答案 0 :(得分:2)
其中一个问题是无法保证字符串的长度足够。例如,空字符串(''
)或带有一个字符('s'
)的字符串也可能最终出现在单词列表中。
快速解决方法是使用长度检查:
for word in st.split():
if len(word) > 1 and word[1] == 's':
print word
或者你可以 - 比如@idjaw说 - 使用切片,然后如果超出范围我们将获得一个空字符串:
for word in st.split():
if word[1:2] == 's':
print word
如果你有一个字符串,你可以获得一个子字符串 st[i:j]
st
字符串,i
第一个索引(包括)和{{ 1}}最后一个索引(不包括)。但是,如果索引超出范围,那不是问题:那么您将获得空字符串。因此,我们只需构建一个从j
开始并以1
结束的切片(包括此处)。如果不存在这样的索引,我们获得空字符串(这不等于1
),否则我们获得一个只有一个字符的字符串:索引为1的字符串。
在这种情况下,您将检查更复杂的模式,您可以使用 正则表达式 :
's'
此处我们指定匹配字词边界import re
rgx = re.compile(r'\b\ws\w*\b')
rgx.findall('print only the words that sstart with an s in the sstatement')
之间的任何内容,\b
s序列为\w
s,第二个字符为s
:
>>> rgx.findall('print only the words that sstart with an s in the sstatement')
['sstart', 'sstatement']