在我打印列表后,它就不再显示了

时间:2018-11-15 01:56:53

标签: python-3.x printing

在下面的代码中,首先在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

2 个答案:

答案 0 :(得分:1)

map创建一个迭代器,该迭代器只能迭代一次。第二次调用list时,D已经为空,因为已经对其进行了迭代。 如果要多次迭代,请执行D=list(map(set, myDat))

答案 1 :(得分:0)

欢迎使用StackOverflow!

原因是由于map()函数本身的行为。它返回一个生成器,该生成器只能使用一次。这意味着map只能对给定输入的列表执行一次功能,然后返回结果对象。之后,生成器已耗尽,无法用于生成相同的结果。因此,惯例是如果要多次使用返回值,请将其保存在变量中。