Форум сайта python.su
857
dobriy_dadaКонкретно задачу опиши. Что пытаешься сделать всем этим кодом?
Дан список, нужно с помощью if сравнить 2 любые соседние элементы, главное чтобы они следовали друг за другом. Что-то типа этого:
Офлайн
24
Да скорее всего каким-то образом отфильтровать список он хочет, на основе сравнения двух соседних элементов.
Вот буквально вчера тоже столкнулся с такой задачей, только мне от итератора нужен не только следующее значение но и предидущее. Написал вот такой итератор ( я думаю что-то подобное есть в закромах у любого питониста )
from itertools import tee, islice, chain def prv_cur_nxt(iterable): """example: for i in prv_cur_nxt(range(3)): print(i) (None, 0, 1) (0, 1, 2) (1, 2, None) """ prv, cur, nxt = tee(iterable, 3) prv = chain([None], prv) nxt = chain(islice(nxt, 1, None), [None]) return zip(prv, cur, nxt)
lst = [1, 1, 2, 3, 5, 9, 9, 9, 15] lst = [c for p, c, n in prv_cur_nxt(lst) if not any([c == p, n == c, p == n])]
Отредактировано ayb (Окт. 18, 2015 08:39:44)
Офлайн
857
aybЕсли он в списке сравнивает два соседних элемента, которые являются символами, то это очень похоже на сравнение двух символов строки.
Да скорее всего каким-то образом отфильтровать список он хочет, на основе сравнения двух соседних элементов.
Офлайн
568
givebackМда, то что там j вместо spisok я и не заметил. Правда ваша. Но, когда он исправит j на spisok получит уже мою ошибку
как видно ошибка возникает ещё на первой итерации, т.е. длина списка не причём. также видно что в переменной j находится текущий элемент списка ('a'), поэтому обращение i+1 тут не уместно, так как это обращение не к следующему элементу списка (как требовалось в задании), а к следующей букве строки j. А так как буква здесь одна, то обращение к i+1 и вызывает ошибку
Офлайн
253
ayb
Написал вот такой итератор ( я думаю что-то подобное есть в закромах у любого питониста )
a=[1,2,3,1,"a","b"] for i in zip(a,a[1:],a[2:]): print(i) >>> (1, 2, 3) (2, 3, 1) (3, 1, 'a') (1, 'a', 'b')
Офлайн
0
это задача со скобками (){} 
я хочу пройти по списку, состоящему из скобок и если 2 соседних элемента представляют собой открывающуюся и закрывающуюся скобку, то удалить эти элементы из списка. Удалить получается только элемент i, командой
del spisok[i]
del spisok[i+1]

for i in range(len(term) - 1): if term[i] is '[' and term[i+1] is ']'
Отредактировано dobriy_dada (Окт. 18, 2015 11:05:52)
Офлайн
6
Если список состоит только из односимвольных элементов, то:
spisok = list(''.join(spisok).replace('[]','%temp%').replace('{}','%temp%').replace('()','%temp%').replace('%temp%',''))
Отредактировано giveback (Окт. 18, 2015 11:46:13)
Офлайн
0
а там же символ в виде ‘(’ и ‘)’, а у Вас они как один символ стоят ‘()’ Вот такой список:
['(', '{', '[', ']', '}', ')', '[', '(', '{', '}', ')', ']']
Офлайн
6
В моём коде список вначале объединяется в одну строку, т.е. если список вида:
['(', '{', '[', ']', '}', ')', '[', '(', '{', '}', ')', ']']
'({[]})[({})]'
Офлайн
857
dobriy_dadaЗадачи со скобками делаются через стек.
это задача со скобками (){}
dobriy_dadais нельзя использовать для таких проверок.if term[i] is '['
Отредактировано py.user.next (Окт. 18, 2015 11:58:27)
Офлайн