【问题标题】:returning whole string in Python; Remove None在 Python 中返回整个字符串;删除无
【发布时间】:2018-09-05 11:45:23
【问题描述】:

我是 Python 的初学者,我想从字符串中删除所有大写数字。我试过下面的代码,但每次函数调用后都没有。我应该从函数返回什么?

def remove_capitals(a_string):
    for latter in a_string:

        if not (ord(latter) in range(65,91)):
            print(latter,end="")
        else:
            continue

print(remove_capitals("A1B2C3D"))
print(remove_capitals("Georgia Institute of Technology"))

我的输出低于输出

123None
eorgia nstitute of echnologyNone

【问题讨论】:

  • else: continue 在循环结束时毫无意义。
  • 您的函数缺少可选的return 语句,因此它返回默认的None。如果print 发生在函数内部,请将其从外部移除,然后执行remove_capitals("A1B2C3D")。否则,不要在内部打印,而是将其返回并在外部打印。,
  • 你的函数已经是prints(),然后返回None。然后打印该返回值。
  • 123 乔治亚理工学院
  • 要么在函数结束时返回单个结果而不在函数内部打印,要么删除 remove_capitals() 周围的 print() 调用。

标签: python string function


【解决方案1】:

您可以使用str.join 中的生成器表达式来删除string.ascii_uppercase 中枚举的所有大写字母

from string import ascii_uppercase
def remove_capitals(a_string):
    return ''.join(i for i in a_string if i not in ascii_uppercase)

>>> print(remove_capitals("A1B2C3D"))
123
>>> print(remove_capitals("Georgia Institute of Technology"))
eorgia nstitute of echnology

【讨论】:

  • 快得多no_caps = dict.fromkeys(range(65, 91)) 然后return a_string.translate(no_caps)
  • 您可以将列表传递给join 而不是生成器来加速它。否则,+1
  • not in ascii_uppercase 意味着对于任何小写字母,您必须遍历 ascii_uppercase 中的每个字符。你不能用not char.isupper()吗?
  • @DSM:当输入使用 ASCII 之外的代码点时,这会扩展可能被删除的字符。
  • @MartijnPieters:不如说它不会将可能被删除的大写字符限制为 OP 硬编码为“大写数字”的字符。
【解决方案2】:

使用isupper

def remove_upper_case(x):
        return ''.join(i for i in x if not i.isupper())

执行:

In [281]: remove_upper_case("Georgia Institute of Technology")
Out[281]: 'eorgia nstitute of echnology'

In [282]: remove_upper_case("A1B2C3D")
Out[282]: '123'

【讨论】:

  • 不需要列表表达式,一个简单的生成器表达式就足够了。
猜你喜欢
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多