创建我自己的字符串函数

时间:2014-02-05 18:46:41

标签: python

def tlower(str1):
    list = list(str1)
    final = ''
    for char in range(0,len(str1)):
        if list[char] in UPPERCASE:
            for ascii in range(0,len(UPPERCASE)):
                if list[char] == UPPERCASE[ascii]:
                    list[char] = LOWERCASE[ascii]
        final += list[char]
    return final

注意 - 大写和小写字母是所有大写/小写字母的字符串

注意 - 不能使用python内置的任何字符串函数(替换等等)

我有这个函数将任何字符串转换为全部小写,(是的,我知道有一个内置函数..)但是与我创建的其他字符串函数相比,这是相当长的,我应该更好的方法这样做?

2 个答案:

答案 0 :(得分:5)

UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
LOWERCASE = "abcdefghijklmnopqrstuvwxyz"

def to_lower(s, trans=dict(zip(UPPERCASE, LOWERCASE))):
    return ''.join(trans.get(ch,ch) for ch in s)

print to_lower('This Is a TEST')   # => 'this is a test'

编辑:

zip()获取两个列表并返回值对,即

zip('ABC', 'abc')    # => [('A','a'), ('B','b'), ('C','c')]

dict()制作字典 - 在这种情况下,

{'A':'a', 'B':'b', 'C':'c'}

trans.get(x, y)是一种更为紧凑的说法trans[x] if x in trans else y。在这种情况下,“如果您有这封信的小写版本,请将其退回,否则将原始信件退回”。

如果你不喜欢.join,那么减少怎么样?

from operator import add

def to_lower(s, trans=dict(zip(UPPERCASE, LOWERCASE))):
    return reduce(add, (trans.get(ch,ch) for ch in s), '')

答案 1 :(得分:1)

为了完整性:

def to_lower(string):
    ords = (ord(c) for c in string)
    return ''.join(chr(o + 32 * (65 <= o <= 90)) for o in ords)