Программа не показывает списки в лямбда-выражениях (python v3) - PullRequest
0 голосов
/ 12 февраля 2020

Добрый день всем, я новичок в программировании. Я написал программу для своего класса логистики для подсчета нескольких переменных. Программа должна вывести 3 списка. Программа показана ниже.

def average(lst):

    average =[]
    for i in range(3,len(lst)):
        average.append((lst[i-3]+lst[i-2]+lst[i-1])/3)
    lst = lst[3:]
    print(lst)
    error = list(map(lambda l, m: ((l[j] - m[j]) for j in range(len(lst))), lst, average))
    abserror = list(map(lambda t: (abs(t[k]) for k in range(len(lst))), error))
    print(average, error, abserror, sep='\n')

lst = [45.0, 48.0, 42.0, 48.0, 49.0, 54.0, 47.0, 50.0, 46.0, 47.0]

average(lst)

После запуска программы я получаю:

[48.0, 49.0, 54.0, 47.0, 50.0, 46.0, 47.0]
[45.0, 46.0, 46.333333333333336, 50.333333333333336, 50.0, 50.333333333333336, 47.666666666666664]
[<generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5871F6C8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874F6C8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874F448>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874F948>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874F9C8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FA48>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FAC8>]
[<generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FB48>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FBC8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FC48>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FCC8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FD48>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FDC8>, <generator object average.<locals>.<lambda>.<locals>.<genexpr> at 0x0000017C5874FE48>]

Ожидаемые списки для вывода:

[48.0, 49.0, 54.0, 47.0, 50.0, 46.0, 47.0]
[45.0, 46.0, 46.333333333333336, 50.333333333333336, 50.0, 50.333333333333336, 47.666666666666664]
[3.0, 3.0, 7.6666664, -3.333333, 0, -4.33333, -0.6666666]
[3.0, 3.0, 7.6666664, 3.333333, 0 , 4.33333, 0.666666]

Так что вопрос как вывести 3 списка с номерами. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Я думаю, это то, что вы ищете. Вы получаете список генераторов, потому что функция map является генератором, поэтому вы получаете список генераторов. В вашем коде также есть проблема, вы не сможете увидеть его, пока не запустите. Проблема с передачей значений в вашу лямбду (l, m). Они являются значениями, а не повторяемыми. Поэтому, когда вы вызываете l [j] или m [j], вы получите ошибку, потому что они являются значениями с плавающей запятой.

def average(lst):

    average = []
    for i in range(3, len(lst)):
        average.append((lst[i - 3] + lst[i - 2] + lst[i - 1]) / 3)
    lst = lst[3:]
    print(lst)
    error = [l - m for l, m in zip(lst, average)]
    abserror = [abs(t) for t in error]
    print(average, error, abserror, sep="\n")


lst = [45.0, 48.0, 42.0, 48.0, 49.0, 54.0, 47.0, 50.0, 46.0, 47.0]

average(lst)

Output

[48.0, 49.0, 54.0, 47.0, 50.0, 46.0, 47.0]
[45.0, 46.0, 46.333333333333336, 50.333333333333336, 50.0, 50.333333333333336, 47.666666666666664]
[3.0, 3.0, 7.666666666666664, -3.3333333333333357, 0.0, -4.333333333333336, -0.6666666666666643]
[3.0, 3.0, 7.666666666666664, 3.3333333333333357, 0.0, 4.333333333333336, 0.6666666666666643]
0 голосов
/ 12 февраля 2020

Я начал не с того, что пытался выяснить, что не так с вашим текущим кодом, но с применением понимания списка вместо отображения для более аккуратного вида. Стало:

def average(lst):
    average_list =[]
    # Sub list startting from 4th element
    sub_list = lst[3:]
    for i in range(3,len(lst)):
        average_list.append((lst[i-3]+lst[i-2]+lst[i-1])/3)
    error_list = [sub_list[j] - average_list[j] for j in range(len(average_list))]
    abs_error_list = [abs(error_list[j]) for j in range(len(error_list))]
    print(average_list, error_list, abs_error_list, sep='\n')

lst = [45.0,48.0,42.0,48.0,49.0,54.0,47.0, 50.0, 46.0, 47.0]

average(lst)

Какие выходы:

[45.0, 46.0, 46.333333333333336, 50.333333333333336, 50.0, 50.333333333333336, 47.666666666666664]
[3.0, 3.0, 7.666666666666664, -3.3333333333333357, 0.0, -4.333333333333336, -0.6666666666666643]
[3.0, 3.0, 7.666666666666664, 3.3333333333333357, 0.0, 4.333333333333336, 0.6666666666666643]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...