список элементов, заданных выходом функции - PullRequest
0 голосов
/ 27 августа 2018

В приведенном ниже коде я написал две функции.Второй применяет первую функцию.Я пытаюсь понять, возможно ли провести итерацию по элементам первой функции.

Это код:

def numbers(n):
    for m in range(n):
        print(m)

def sets(n):
    r=[]
    for e in numbers(n):
      r.append([e])
    return r

sets(6)

Я хотел бы получить результат [[0], [1], [2], [3], [4], [5]].

Я знаю, что есть другие способы (не определяющие функцию) по порядкучтобы получить все числа от 0 до m-1, но для того, что фактически разработал код, это связано с проблемой, которую я пытаюсь исправить.

Полученное сообщение об ошибке:

'NoneType' object is not iterable

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

для e в числах (n) возвращено None, поскольку вы не можете перебрать None.Это означает, что ничего не найдено. Это может решить проблему

def sets(n):
    r=[]
    for e in numbers(n) or []:    
        r.append([e])  
    return r      

print(sets(6))

Кроме того, попробуйте это в первой части

def numbers(n):  
    return range(n)
0 голосов
/ 27 августа 2018

Ваша функция numbers ничего не делает со вводом, кроме его печати.К сожалению, печать не будет иметь побочного эффекта вне самой функции.У вас есть много доступных исправлений.

Наиболее питонным является создание генератора вместо обычной функции:

def numbers(n):
    for m in range(n):
        yield m

или, проще,

def numbers(n):
    yield from range(n)

Этобыло бы гораздо менее эффективно, но не менее правильно построить всю итерацию, которую вы хотите заранее, при условии, что вы вернете ее правильно:

def numbers(n):
    value = []
    for m in range(n):
        value.append(m)
    return value

или более эффективно:

def numbers(n):
    value = [m for m in range(n)]
    return value

или тривиально

def numbers(n):
    return range(n)
0 голосов
/ 27 августа 2018
def numbers(n):
    #for m in range(n):
    #    print(m)
    return range(n)


def sets(n):
    r=[]
    for e in numbers(n):
      r.append([e])
    return r

print(sets(6))

Вывод:

[[0], [1], [2], [3], [4], [5]]

Pythonic способ решения вашей проблемы заключается в следующем - один вкладыш

def create_list(n):
    return [[x] for x in range(n)] # Important one liner

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