Python3下map函数的问题

今天在群里有人问题,他的Python程序在家里运行好好的,但在公司一运行,就出问题了,查来查去查不出来,于是我就把他的程序调转过来看了一下,发现又是Python2.7与Python3的问题。
代码是做了一个可定义任意位数的水仙花数函数

def fn(n):
    rs = []
    for i in range(pow(10,n-1),pow(10,n)):
        rs = map(int, str(i))
        sum = 0
        for k in range(0,len(rs)):
            sum = sum + pow(rs[k],n)
        if sum == i:
            print(i)
if __name__=="__main__":
    n = int(input("请输入正整数的位数:"))
    fn(n)

在Python2.7下面运行结果:

请输入正整数的位数:5

54748

92727

93084

Process finished with exit code 0

但在Python3下面运行结果:

请输入正整数的位数:5

Traceback (most recent call last):

File "D:/Program Files/JetBrains/PyCharm 2017.1.5/myPY/myPYPro/lesson001.py", line 18, in <module>

fn(n)

File "D:/Program Files/JetBrains/PyCharm 2017.1.5/myPY/myPYPro/lesson001.py", line 11, in fn

for k in range(0,len(rs)):

TypeError: object of type ‘map‘ has no len()

Process finished with exit code 1

因为提示是:TypeError: object of type ‘map‘ has no len()
所以直接把代码简化,输出list看看
简化代码如下:

rs = []
for i in range(100,1000):
    rs = map(int, str(i))
print(rs)

在Python2.7下面运行结果:
[9, 9, 9]
Process finished with exit code 0

但在Python3下面运行结果:

<map object at 0x00C6E530>

Process finished with exit code 0

好吧,这就明白了,Python3下发生的一些新的变化,再查了一下文档,发现加入list就可以正常了
在Python3中,rs = map(int, str(i))  要改成:rs = list(map(int, str(i)))

则简化代码要改成如下:

rs = []
for i in range(100,1000):
    rs = list(map(int, str(i)))
print(rs)

Python3下面运行结果就正常了:
[9, 9, 9]
Process finished with exit code 0

之前就发布过一篇关于:Python 2.7.x 和 3.x 版本区别小结

基于两个版本的不一样,如果不知道将要把代码部署到哪个版本下,可以暂时在代码里加入检查版本号的代码:
import platform
platform.python_version()

通过判断版本号来临时调整差异,不过现在只是过渡,以后大家都使用Python3以下版本后,就应该不需要这样做了。

时间: 2024-11-08 21:27:06

Python3下map函数的问题的相关文章

Python3中map函数的问题

在Python2中map函数会返回一个list列表,如代码: >>> def f(x, y): return (x, y) >>> l1 = [ 0, 1, 2, 3, 4, 5, 6 ] >>> l2 = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ] 返回结果如下: >>> map(f, l1, l2) [(0, 'Sun'), (1, 'Mon'), (2, 'Tue'),

python3中map()函数用法

python源码解释如下: map(func, *iterables) --> map object Make an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterable is exhausted. 简单来说, map()它接收一个函数 f 和一个 可迭代对象(这里理解成 list),并通过把函数 f 依次作用在 list 的每

Python中map函数

1.简介 python 提供内置函数map(), 接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回.例如: (1)对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]如果希望把list的每个元素都作平方,就可以用map()函数:因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算: def f(x): return x * x print(list(map(f, [1, 2, 3, 4, 5,

Python3版本中的filter函数,map函数和reduce函数

一.filter函数: filter()为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为非零的元素将被添加至一个列表中 1 def f1(x): 2 if x>20: 3 return True 4 else: 5 return False 6 7 l1 = [ 1, 2, 3, 42, 67, 16 ] 8 print(filter(f1, l1)) 9 #输出如下: 10 #<filter object at 0x000000000117B898> 11 l2 = filt

python3:lambda,map,filter内置函数

notes: 参考文档-(菜鸟教程)http://www.runoob.com/python/python-built-in-functions.html 参考文档-(妖白)http://blog.csdn.net/qq_24753293/article/details/78337818 一.lambda() 描述: 简化def函数 实例: A=lambda x:x+1 理解为: def A(x): return x+1 冒号左边→想要传递的参数 冒号右边→想要得到的数(可能带表达式) 二.ma

python3中map()和reduce()函数的使用

问题一:利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart'] 问题二:Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积 问题三:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456 # -*- coding:utf

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te

MAP函数应用于多线程下载图片

# -*- coding:utf8 -*- from bs4 import BeautifulSoup import os, sys, urllib2, urllib from multiprocessing.dummy import Pool as ThreadPool urls = [] def download(url): urllib.urlretrieve(url, 'd:/'+url[-7:]) def page_loop(page=1): url = 'http://www.bea

jquery中map函数与each函数的区别

?jquery中的each函数和map函数的用法看起来差不多,但其实还是有一点区别的. ?其中一个重要的区别是,each返回的是原来的数组,并不会新创建一个数组.而map方法会返回一个新的数组.如果在没有必要的情况下使用map,则有可能造成内存浪费. ?例如: var items = [1,2,3,4]; ? $.each(items, function() { alert('this is ' + this); }); var newItems = $.map(items, function(