Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 20, 2012 15:19:58

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

Помогите со списком!

Задача такая из готового списка брать элементы с четными и нечетными номерами, в зависимости от четности прибавлять или отнимать 1, создать новый список с измененными значениями.
я сделал так:

i = 0
a = []
e = [1,2,3,4,5,6,7]
m = len(e)
while  i < m:
    i+=1
    if i%2 == 0:
        w = e[i]+1
        a.insert(i, w)
    else:
        w = e[i]-1
        a.insert(i, w)
print a
выдает ошибку IndexError: list index out of range
хотя если сделать так то все работает:
i = 0
a = []
e = [1,2,3,4,5,6,7]
m = len(e)
while  i < m:
    i+=1
    if i%2 == 0:
        w = +1
        a.insert(i, w)
    else:
        w = -1
        a.insert(i, w)
print a
В чем проблема? И как сделать правильно?

Офлайн

#2 Окт. 20, 2012 15:41:43

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Помогите со списком!

>>> e = [1,2,3,4,5,6,7]
>>> out = []
... for index,item in enumerate(e):
...     item += 1 if index%2 else -1
...     out.append(item)
... 
... print out
[0, 3, 2, 5, 4, 7, 6]



Офлайн

#3 Окт. 20, 2012 15:52:16

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

Помогите со списком!

А если действия совершаемые над элементами списка будут посложнее, например сложить i-й и i+1 элементы, а при нечетных сложить i-й и i-1 ?

Отредактировано jeka7 (Окт. 20, 2012 15:53:07)

Офлайн

#4 Окт. 20, 2012 16:54:20

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите со списком!

ls = [1,2,3,4,5,6,7]
[elt+1 if idx%2 else elt-1 for idx,elt in enumerate(ls)]
Out[2]: [0, 3, 2, 5, 4, 7, 6]
[ls[idx] + ls[idx+1] if idx%2 else ls[idx] + ls[idx-1] for idx, elt in enumerate(ls)]
Out[3]: [8, 5, 5, 9, 9, 13, 13]

Офлайн

#5 Окт. 21, 2012 21:12:03

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

Помогите со списком!

sergeek, напиши пожфлуйста в общем виде. Ну к примеру если я буду выполнять действия с большим числим элементов, а не с двумя, хочу понять принцип. новичек, что сказать)

Офлайн

#6 Окт. 28, 2012 11:27:45

Tempys
Зарегистрирован: 2012-10-27
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите со списком!

e =
l =
for i in e:
if i%2 ==0: l.append(i+1)
else: l.append(i-1)

print(l)

Офлайн

#7 Окт. 28, 2012 12:24:17

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите со списком!

Если в общем виде - то так для компрехеншенов из моего примера и так для цикла for из примеров выше, но по ним редко изучают язык обычно просто эксперементируют по-разному в шелле.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version