Найти - Пользователи
Полная версия: Помогите со списком!
Начало » Python для новичков » Помогите со списком!
1
jeka7
Задача такая из готового списка брать элементы с четными и нечетными номерами, в зависимости от четности прибавлять или отнимать 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
В чем проблема? И как сделать правильно?
sp3
>>> 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]
jeka7
А если действия совершаемые над элементами списка будут посложнее, например сложить i-й и i+1 элементы, а при нечетных сложить i-й и i-1 ?
sergeek
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]
jeka7
sergeek, напиши пожфлуйста в общем виде. Ну к примеру если я буду выполнять действия с большим числим элементов, а не с двумя, хочу понять принцип. новичек, что сказать)
Tempys
e =
l =
for i in e:
if i%2 ==0: l.append(i+1)
else: l.append(i-1)

print(l)
sergeek
Если в общем виде - то так для компрехеншенов из моего примера и так для цикла for из примеров выше, но по ним редко изучают язык обычно просто эксперементируют по-разному в шелле.
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