Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2012 15:51:45

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

Имеется два списка, в которые вводятся данные. Эти два списка с числом элементов n нужно разбить на два новых списка с числом элементов m=2*(n-1). А элементы должны стоять в последовательности:
если индекс элемента четный(нового списка) то берется элемент (из имеющегося списка) с индексом j=l/2, если не четный - jl+1)/2 где l-номер элемента.
Я сделал так, ответ не правильный т.к. в конце масива появляются числа которые должны быть в начале:

e = []
I = []
n = input('n=') 
i = 0
while i < n:
    i+=1
    Ii = input('I=')
    ei = input('e=') 
    e.insert(n, Ii)
    I.insert(n, ei)
    
el = []
Il = []
w = []
l=0
m = 2*(n-1) # Количество элементов нового списка
while l < m:
    l+=1   
    if l%2 == 0:
        j = l/2
        ej = e[j]
        Ij = I[j]
        el.insert(j, ej)
        Il.insert(j, Ij)
    else:  
        j = (l+1)/2
        ej = e[j]
        Ij = I[j]
        el.insert(j, ej)
        Il.insert(j, Ij)
print("e =",e)
print('I=',I)
print('el=',el)
print('Il=',Il)

Пример ответа:
>>> 
n=5
I=1
e=1
I=2
e=2
I=3
e=3
I=4
e=4
I=5
e=5
('e =', [1, 2, 3, 4, 5])
('I=', [1, 2, 3, 4, 5])
('el=', [2, 2, 3, 4, 5, 5, 4, 3])
('Il=', [2, 2, 3, 4, 5, 5, 4, 3])
>>> 
должно получится примерно так
 [2, 2, 3, 3, 4, 4, 5, 5]
Помогите исправить, или как можно сделать по другому.

Отредактировано jeka7 (Окт. 24, 2012 15:59:04)

Офлайн

#2 Окт. 24, 2012 15:54:43

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

если не четный - j ровно (l+1)/2 (это где смайлик выскочил)

Офлайн

#3 Окт. 24, 2012 18:10:35

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

Если я правильно понял условие задачи то как-то так:

def console_read_int(prompt):
    return int(raw_input(prompt).strip())
def read_list(prompt_fmt, n):
    return [console_read_int(prompt_fmt.format(i)) for i in xrange(n)]
n = console_read_int('n=')
both_lst = zip(read_list('I[{}]=', n), read_list('e[{}]=', n))
m = 2 * (n - 1)
el, Il = [], []
for i in xrange(m):
    j = ((i + 1) / 2) if (i % 2) else (i / 2)
    I, e = both_lst[j]
    Il.append(I)
    el.append(e)
print el
print Il

Офлайн

#4 Окт. 24, 2012 18:34:32

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

Спасибо ,s0rg , все правильно понял! Все отлично работает!

Офлайн

#5 Окт. 24, 2012 21:16:49

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

s0rg
def console_read_int(prompt):
return int(raw_input(prompt).strip())
def read_list(prompt_fmt, n):
return
n = console_read_int('n=')
both_lst = zip(read_list('I=', n), read_list('e=', n))
m = 2 * (n - 1)
el, Il = ,
for i in xrange(m):
j = ((i + 1) / 2) if (i % 2) else (i / 2)
I, e = both_lst
Il.append(I)
el.append(e)
print el
print Il
Как сделать чтоб можно было вводить дробные числа в список???

Отредактировано jeka7 (Окт. 24, 2012 21:17:29)

Офлайн

#6 Окт. 25, 2012 12:53:22

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

jeka7
Как сделать чтоб можно было вводить дробные числа в список???
Заменить функцию:
def read_list(prompt_fmt, n):
    return [float(raw_input(prompt_fmt.format(i).strip()) for i in xrange(n)]

Офлайн

#7 Окт. 25, 2012 14:54:52

jeka7
От: Беларусь, Орша
Зарегистрирован: 2012-10-06
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с созданием нового списка из имеющегося.

Спасибо, работает, но не хватала одной скобки

return [float(raw_input(prompt_fmt.format(i).strip())) for i in xrange(n)]

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version