Примечание: Я не уверен, должен ли я задавать этот вопрос здесь или в CodeGolf, поэтому я отправлю его здесь, если это будет уместно.Лямбда-диапазон для петли
Я пытаюсь сделать цикл в Python с использованием лямбды, который имеет следующий формат:
x = 10
y = range(10)
w = 2
for g in range(w*w, x, w):
y[g] = 0
print y
Это выводит правильный список [0, 1, 2, 3, 0, 5, 0, 7, 0, 9]
. Тем не менее, я не могу заставить список изменить, используя lambdas. Мой код таков:
print(lambda w,x=10,y=range(10): (map(lambda g: (lambda f=y.__setitem__: (f(g,0))()), range(w*w,x,w)), y))(2)
"""
w is the step value in the for loop, which is 2
x is the size of the list, 10
y is the list, range(10)
lambda g is the first argument for map as the function. It sets the value of the list y at the current index g to be 0, through the use of lambda f's setitem
range(w*w,x,w) is the second argument passed to map as an iterable. In theory, all the indexes of y in this list should be set to 0 through the use of lambda f
y is returned to be printed
2 is the value passed to w
"""
Однако это возвращает [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
, что является неправильным. Кто-нибудь знает, как я могу добиться этого в одной строке? Должен ли я использовать другие встроенные функции для создания цикла в лямбда? Я использовал this и this для справки, если это помогает.
Есть ли цель сделать это одной линией? Или использовать lambdas для устранения всех конструкций типа for-loop? Можно ли использовать список понятий? – zehnpaard
Предполагалось, что это первое сито с прямой линией. Это лишь часть его. –
Вы не должны так поступать. Это очень плохой код. – shx2