после того, как я распечатал список, он просто исчез - PullRequest
0 голосов
/ 15 ноября 2018

В следующем коде сначала создайте коллекцию списков в функции loadDataSet (), а затем используйте функцию map, чтобы преобразовать ее в набор D, после этого он может печататься только один раз и стать enpty. Кто-нибудь знает, что здесь происходит? спасибо.

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 голосов
/ 15 ноября 2018

Добро пожаловать в StackOverflow!

Причина заключается в поведении самой функции map().Возвращает генератор, который можно использовать только один раз.Это означает, что map может выполнить функцию только в списке заданных входов один раз и вернуть полученный объект.После этого генератор исчерпан и не может быть использован для получения того же результата.Поэтому рекомендуется сохранять возвращаемое значение в переменной, если вы собираетесь использовать его более одного раза.

0 голосов
/ 15 ноября 2018

map создает итератор, который может быть повторен только один раз.Во второй раз, когда вы вызываете list, D уже пусто, так как оно уже было повторено.Если вы хотите повторить его несколько раз, выполните D=list(map(set, myDat))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...