Найти - Пользователи
Полная версия: Элементы списка, с постоянно меняющимся шагом.
Начало » Центр помощи » Элементы списка, с постоянно меняющимся шагом.
1
BBsCientist
Итак нужно сформировать список такого типа(сделал):
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)

Затем, нужно для этого списка, сделать следующий алгоритм:
1. есть малый шаг, для первого элемента он равен 3:
small_step = 3
2. находим отсюда большой шаг, для первого элемента(8), он равен сам элемент * 2 - малый шаг:
big_step = 2 * i - small_step #(i=8)
3. теперь нужно, для всего списка, делать сначала большой шаг, и записать сюда 0:
if i > 1: lst[big_step] = 0
4. затем прибавить к большому шагу малый и сюда записать 0:
lst[big_step+small_step] = 0
5. затем к этому прибавить снова большой шаг и сюда записать 0:
lst[big_step+small_step+big_step] = 0
6. и т.д.(делать попеременный шаг)
7. затем для второго элемента в списке(10), вычисляем малый шаг, он равен:
small_step += 2 #(5)
8. вычисляем большой шаг для второго элемента:
big_step = 2 * i - small_step #(i=10)
9. повторяем всё тоже самое, что и для первого элемента шаг 3-6
10 снова вычисляем малый шаг для следующего элемента он равен предыдущий
small_step += 2 # (7)
и так далее

Помогите реализовать данный алгоритм.

P/S Уже голову сломал
py.user.next
BBsCientist
Итак нужно сформировать список такого типа(сделал):
Какой список нужно сформировать?

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]
botinag
вы уверенны в правильности реализации своей функции?
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)
py.user.next
BBsCientist
6. и т.д.(делать попеременный шаг)
Каково условие окончания этого цикла?

py.user.next
10 снова вычисляем малый шаг для следующего элемента он равен предыдущий
и так далее
Каково условие окончания этого цикла?

BBsCientist
before
BBsCientist
after
Список after должен содержать ноль на 14 позиции после первого шага цикла, так как первый “большой шаг” получается 13. Индексация с нуля.
botinag
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]
BBsCientist
Всё сделал то что надо, в индексах запутался закрывайте тему!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB