python个人学习——map

def char2num(s):

digits = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}

return digits[s]

print(map(char2num, '13579'))

输出结果为:

[1, 3, 5, 7, 9]

问题:map生成的一定是list吗?为什么有逗号?

str转换为int的函数:(一个把字符串转化为整数的函数)

from functools import reduce

DIGITS = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}

def str2int(s):

    def fn(x, y):

        return x *10 + y

    def char2num(s):

        return DIGITS[s]

    return reduce(fn, map(char2num, s))

把一个字符串转化为浮点数的函数

def str2float(s):

    def fn(x, y):

        return x * 10 + y

    def cn(x,y):

        return x*0.1+y

    def char2num(s):

        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

        return digits[s]

    for i in range(len(s)):

        if s[i]=='.':

            l1=reduce(fn, map(char2num, s[:i]))

            l2=reduce(cn, map(char2num, s[:i-len(s):-1]))

    return l1+l2/10

#测试

print('str2float(\'123.456\') =', str2float('123.456'))

if abs(str2float('123.456') - 123.456) < 0.00001:

    print('测试成功!')

else:

    print('测试失败!')

练习

1利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

代码:

def normalize(name):

    return name.capitalize()

# 测试:

L1 = ['adam', 'LISA', 'barT']

L2 = list(map(normalize, L1))

print(L2)

你可能感兴趣的:(python个人学习——map)