Сравнение Python-кортежей для поиска значений, также найденных в предыдущем и следующем кортежах - PullRequest
3 голосов
/ 22 марта 2012
a = [('08:57', 'Edinburgh', '12:08'), ('12:08', 'London', '12:50'), ('12:50', 'London', 14:44')]

Итак, у меня есть списки времени (это поездки на автобусе), например, «а» выше, и каждый кортеж содержит время начала и окончания участка и название станции.Тем не менее, они также иногда содержат ноги, которые просто «ждут на автобусной станции» ноги.Они могут быть идентифицированы тем фактом, что время начала идентично времени остановки предыдущего этапа, а время остановки - времени начала следующего этапа.Я хочу идентифицировать их, а затем удалить их.Я задавался вопросом о наборах, но на автобусной станции были названы винты, а потом я задавался вопросом о генераторах.

Итак, что-то грубое, вроде:

gen = (item for item in a) #turn list into generator object

try:
    while 1:
        if gen.next()[2] == gen.next()[0] and gen.next()[0]:
            print 'match'
except StopIteration:            
    print 'all done'

работает, но не работаетчтобы определить позицию индекса исходного кортежа, чтобы удалить его.

Был бы очень признателен за подход к этому.

1 Ответ

1 голос
/ 22 марта 2012

Вы можете перебрать все тройки соседних ветвей и отфильтровать ненужные, используя

filtered_a = [a[0]]
for x, y, z in zip(a, a[1:], a[2:]):
    if x[2] != y[0] or y[2] != z[0]:
        filtered_a.append(y)
filtered_a.append(a[-1])

(в этом коде предполагается, что в a есть как минимум две ветви).

...