Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 26, 2014 08:14:23

BBsCientist
Зарегистрирован: 2014-11-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

Итак нужно сформировать список такого типа(сделал):

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 Уже голову сломал

Отредактировано BBsCientist (Ноя. 26, 2014 08:21:19)

Офлайн

#2 Ноя. 26, 2014 08:49:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9894
Репутация: +  854  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

BBsCientist
Итак нужно сформировать список такого типа(сделал):
Какой список нужно сформировать?

BBsCientist
Затем, нужно для этого списка, сделать следующий алгоритм:
Приведи первоначальный список, потом приведи конечный список.

Из кода понятно только то, что ты его неправильно написал. Там внутренний цикл, в котором всегда выполняется только первый шаг.



Офлайн

#3 Ноя. 26, 2014 09:05:44

BBsCientist
Зарегистрирован: 2014-11-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

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)

Офлайн

#4 Ноя. 26, 2014 09:17:06

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

вы уверенны в правильности реализации своей функции?

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)

Офлайн

#5 Ноя. 26, 2014 09:28:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9894
Репутация: +  854  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

BBsCientist
6. и т.д.(делать попеременный шаг)
Каково условие окончания этого цикла?

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

BBsCientist
before
BBsCientist
after
Список after должен содержать ноль на 14 позиции после первого шага цикла, так как первый “большой шаг” получается 13. Индексация с нуля.



Офлайн

#6 Ноя. 26, 2014 10:47:14

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

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]

Офлайн

#7 Ноя. 26, 2014 13:39:48

BBsCientist
Зарегистрирован: 2014-11-26
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Элементы списка, с постоянно меняющимся шагом.

Всё сделал то что надо, в индексах запутался закрывайте тему!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version