Форум сайта python.su
Итак нужно сформировать список такого типа(сделал):
N = 100
def generate_lst(n):
lst = []
start = 10
step = 6
for i in range(8, n, step):
lst.append(i)
for j in range(start, n):
lst.append(j)
break
start += step
return lst
lst = generate_lst(N)
small_step = 3
big_step = 2 * i - small_step #(i=8)
if i > 1: lst[big_step] = 0
lst[big_step+small_step] = 0
lst[big_step+small_step+big_step] = 0
small_step += 2 #(5)
big_step = 2 * i - small_step #(i=10)
small_step += 2 # (7)
Отредактировано BBsCientist (Ноя. 26, 2014 08:21:19)
Офлайн
BBsCientistКакой список нужно сформировать?
Итак нужно сформировать список такого типа(сделал):
BBsCientistПриведи первоначальный список, потом приведи конечный список.
Затем, нужно для этого списка, сделать следующий алгоритм:
Офлайн
py.user.next
before = [8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50,
52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98, 100]
after = [8, 10, 14, 16, 20, 22, 26, 0, 32, 34, 0, 40, 44, 46, 50,
0, 56, 0, 62, 64, 0, 70, 74, 76, 0, 82, 86, 0, 92, 0, 0, 100]
Отредактировано BBsCientist (Ноя. 26, 2014 09:11:50)
Офлайн
вы уверенны в правильности реализации своей функции?
N = 100 def generate_lst(n): lst = [] start = 10 step = 6 for i in range(8, n, step): lst.append(i) for j in range(start, n): # это эквивалентно следующему коду: lst.append(j) # if start < n: break # lst.append(start) start += step return lst lst = generate_lst(N)
Отредактировано botinag (Ноя. 26, 2014 09:18:01)
Офлайн
BBsCientistКаково условие окончания этого цикла?
6. и т.д.(делать попеременный шаг)
py.user.nextКаково условие окончания этого цикла?
10 снова вычисляем малый шаг для следующего элемента он равен предыдущий
и так далее
BBsCientist
before
BBsCientistСписок after должен содержать ноль на 14 позиции после первого шага цикла, так как первый “большой шаг” получается 13. Индексация с нуля.
after
Офлайн
BBsCientistнакидал следующий код. он конечно выводит не то, что у вас в примере, но возможно будет полезен…before = [8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98, 100] after = [8, 10, 14, 16, 20, 22, 26, 0, 32, 34, 0, 40, 44, 46, 50, 0, 56, 0, 62, 64, 0, 70, 74, 76, 0, 82, 86, 0, 92, 0, 0, 100]
from itertools import cycle def gen_new_lst(lst): small_steps = [x+3 for x in range(0, 2*len(lst), 2)] big_steps = [2*lst[i] - small_steps[i] for i in range(len(lst))] big_and_small_pairs = zip(big_steps, small_steps) new_lst = lst[:] for y in range(len(new_lst)): index = 0 for x in cycle(big_and_small_pairs[y]): index += x if index < len(new_lst): new_lst[index] = 0 else: break return new_lst
>>> before [8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98, 100] >>> gen_new_lst(before) [8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 0, 50, 0, 0, 58, 62, 64, 0, 0, 74, 0, 80, 82, 86, 88, 0, 0, 98, 0]
Офлайн
Всё сделал то что надо, в индексах запутался закрывайте тему!
Офлайн