【发布时间】:2013-10-17 00:54:57
【问题描述】:
我必须用 Python 编写一个程序,它要求用户输入一个字符串,它只打印出那些以“s”或“S”开头的单词。我正在使用.split 函数来创建单词列表。但是,我无法弄清楚如何让 Python 识别那些以“s”或“S”开头的单词。非常感谢任何建议或帮助!
【问题讨论】:
我必须用 Python 编写一个程序,它要求用户输入一个字符串,它只打印出那些以“s”或“S”开头的单词。我正在使用.split 函数来创建单词列表。但是,我无法弄清楚如何让 Python 识别那些以“s”或“S”开头的单词。非常感谢任何建议或帮助!
【问题讨论】:
您可以将字符串的startswith 方法与将字符串转换为全小写字母的lower 方法结合使用。
words = raw_input().split()
for word in words:
if word.lower().startswith('s'):
# do something
当且仅当调用字符串以您作为参数传递给它的子字符串开头时,方法startswith 将返回 True。
【讨论】:
我会像这样使用字符串的.lower 方法:
>>> mystr = 'Super Sally rode a super ship.'
>>> [x for x in mystr.split() if x.lower()[0] == 's']
['Super', 'Sally', 'super', 'ship.']
>>>
您也可以使用.startswith 方法而不是在位置 0 处索引字符串:
# This method, while longer, is really clear as to what's going on.
[x for x in mystr.split() if x.lower().startswith('s')]
【讨论】:
x.lower().startswith("s")
借用@iCodez 的精彩示例字符串 - 这是一个正则表达式方法:
>>> import re
>>> mystr = 'Super Sally rode a super ship.'
>>> re.findall(r's\S+', mystr, flags=re.I)
['Super', 'Sally', 'super', 'ship.']
这样就不必为了比较而拆分字符串并显式规范化大小写。
另外,您可以稍微调整一下,以免捕捉到不需要的标点符号,例如:
>>> re.findall(r's\w+', mystr, flags=re.I)
['Super', 'Sally', 'super', 'ship']
【讨论】:
使用startswith (http://docs.python.org/2/library/stdtypes.html#str.startswith)
for x in your_string.split():
if x.upper().startswith('S'):
print x
【讨论】:
startswith 实际上需要一个元组。
所以:
words = raw_input()
print [word for word in words.split() if word.startswith(('s', 'S'))]
听起来很像英语,并且易于阅读。我更喜欢.lower()
【讨论】: