问题描述
我正在尝试编写一个简单的函数,该函数接受一个字符串并返回一个字符串,而该字符串不包含原始字符串中的大写字母。我看过许多其他帖子,它们的问题与我的相似,但是其中大多数都是由于缺乏知识而无法理解的技能水平。
这是我想出的。
def no_capitals(string):
result = []
for char in string:
if not char.isupper(): result.append(char)
return (result)
print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))
所需的输出将是:
007
men cute
但是,毫不奇怪,此函数以列表形式返回。
['0','0','7']
['m','e','n','c','u','t,'e']
所以我想我将不得不以不同的方式来解决这个问题。我对Python的了解非常有限,因此我没有很多可使用的“工具”。有人能指出我正确的方向吗?
解决方法
您可以使用''.join()
:
def no_capitals(string):
return ''.join(char for char in string if not char.isupper())
print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))
输出:
007
men cute
,
最简单的方法是使用+=
而不是append
。如果使用append,则将char添加到列表中,而不将结果与下一个char连接在一起,并且在结果中返回带有字符的列表。
def no_capitals(string):
result = ""
for char in string:
if not char.isupper(): result += char
return (result)
print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))
更有效的可能性是使用.join()函数。因此,请看下面。
def no_capitals(string):
result = []
for char in string:
if not char.isupper(): result.append(char)
return "".join(result)
print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))
,
使用''.join并删除大写字母,它可以工作(感谢dan1st提供以下注释)。
-0.000547
,
保持创建的结构并仅更改最少的代码量即可:
def no_capitals(string):
#result as a string
result = ''
for char in string:
#if the character is not uppercase add it to the end of result
if not char.isupper(): result += char
return (result)
print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))
现在给出:
007
men cute
注意:男人和可爱之间有两个空格
,string = "X007XK"
caps_omitted_string = filter(lambda c: not c.isupper(),string)