Понимание функций с пониманием списка - PullRequest
0 голосов
/ 23 сентября 2019

может кто-нибудь кратко объяснить мне последнюю строку кода

Пытался разобраться с разными значениями диапазона

def Function_1(x):
    return x*2

def Function_2(x):
    return x*4

empty_list = []
for i in range(16):
    empty_list.append(Function_1(Function_2(i)))

print(empty_list)

print([Function_1(x) for x in range(64) if x in [Function_2(j) for j in range(16)]])

Вывод:

[0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120]
[0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120]

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Хорошо, что делает последняя строка,

[(2 * x) for x in range(64)], которая дает список из 64 чисел (умноженный на 2), а затем у нас есть условие, говорящее if x in [(4 * j) for j in range(16)].Во втором списке будет проверено, существует ли такой же номер из первых списков, и будут ли учитываться только эти номера в окончательном OP.

OP function_1:

[(2 * x) for x in range(64)]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126]

OP function_2:

[(4 * j) for j in range(16)]
# [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60]

Найдите, есть ли во втором списке числа из первого списка, назовите их x и верните 2 * x

print([x*2 for x in range(64) if x in [j*4 for j in range(16)]])
# [0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120]
0 голосов
/ 23 сентября 2019

Может быть, это поможет:

Строка

output = [function_1(x) for x in range(64) if x in [function_2(j) for j in range(16)]]

эквивалентна

output = []
y = [function_2(j) for j in range(16)]
for x in range(64):
    if x in y:
        output.append(function_1(x))
...