在Python中无需大写字母即可打印的函数

问题描述

我正在尝试编写一个简单的函数,该函数接受一个字符串并返回一个字符串,而该字符串不包含原始字符串中的大写字母。我看过许多其他帖子,它们的问题与我的相似,但是其中大多数都是由于缺乏知识而无法理解的技能水平。

这是我想出的。

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)