在下面的代码中,首先在loadDataSet()函数中创建一个列表集合,然后使用map函数将其转换为集合D,此后,它只能打印一次并变为空。任何人都知道吗在这里吗?谢谢。
def loadDataSet():
return [ [ 1, 3, 4 ], [ 2, 3, 5 ], [ 1, 2, 3, 5 ], [ 2, 5 ] ]
if __name__ == '__main__':
myDat = loadDataSet()
D = map( set, myDat )
print("first print: ",list(D))
print("second print: ",list(D))
print("len of D: ",len(list(D)))
我使用python 3.5.2,输出为:
first print: [{1, 3, 4}, {2, 3, 5}, {1, 2, 3, 5}, {2, 5}]
second print: []
len of D: 0
答案 0 :(得分:1)
map
创建一个迭代器,该迭代器只能迭代一次。第二次调用list
时,D
已经为空,因为已经对其进行了迭代。
如果要多次迭代,请执行D=list(map(set, myDat))
答案 1 :(得分:0)
欢迎使用StackOverflow!
原因是由于map()
函数本身的行为。它返回一个生成器,该生成器只能使用一次。这意味着map只能对给定输入的列表执行一次功能,然后返回结果对象。之后,生成器已耗尽,无法用于生成相同的结果。因此,惯例是如果要多次使用返回值,请将其保存在变量中。