-4

我有这个功能,但我不熟悉错误或如何纠正它。

def intify(file1):
    numbers=range(0,10)
    strnum=[]
    for x in numbers:
        strnum.append(str(x))

    number1=[]
    for line in file1:
        for split in line.split(' '):
                number1.append(split)

    listnum=[]
    for x in number1:
        if x[0] in strnum:
            listnum.append(x)

    w=map(float, listnum)
    #return w
    print(w)

0x275b990 处的错误映射对象

4

2 回答 2

5

0x275b990 处的错误映射对象

这不是错误 - 您只需打印迭代器的地址,由map. 您可以打印list(w)以确保一切正常。当然,您不应该返回 list(w),因为它是不必要且昂贵的。

于 2013-05-08T15:45:39.320 回答
4

在 Python 3+ 中,map()是一个类,而不是一个函数(此处的文档)。一个map实例可以被迭代,并且序列中的每个项目将仅根据需要进行处理(“惰性评估”)。这样就不需要创建实际列表,节省时间和内存,如果您不需要所有项目(例如,当您达到某个值时停止处理),那么您也可以节省一堆函数调用。那么,一般来说,你会想要做这样的事情map()

for num in map(float, listnum):
     print(num)   # or do something else

如果你真的想要一个实际的列表,只需将其转换为一个:list()构造函数接受任何可迭代的,包括一个map()实例:

w = list(map(float, listnum))

打印对象时看到map的不是错误,而是对象的默认 Python 显示 ( repr())。代码是id()十六进制的对象的,在CPython中是它的内存地址;这主要用于将一个实例与其他实例区分开来。你会经常看到这种情况,所以要习惯它。

于 2013-05-08T15:49:21.863 回答