2012-03-22 72 views
3
a = [('08:57', 'Edinburgh', '12:08'), ('12:08', 'London', '12:50'), ('12:50', 'London', 14:44')] 

所以我有次名單也發現(這是巴士​​旅程),如「A」以上的每個元組包含的啓動和停止的腿的時間,一個電臺名稱。但是,它們有時還包含「在巴士站等待」腿的腿。這些可以通過以下事實來識別:開始時間與前一段的停止時間相同,並且停止時間與後一段的開始時間相同。我想識別這些然後刪除它們。我想知道一些套件,但公共汽車站命名螺絲,然後我想知道發電機。比較蟒蛇元組找到值在前面和後面的元組

因此,一些原油,如:

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

可以遍歷相鄰腿部所有的三元組,並使用

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。)

+0

的'zip'可以是如果你想避免複製列表,可以用任何[滾動窗口迭代器]替換(http://stackoverflow.com/questions/7113724/iterator-with-memory/7113802#7113802)。 – agf 2012-03-22 12:56:15

+0

@agf:你說得對,在這裏鏈接迭代器解決方案是絕對有用的,即使這裏使用它太過分了。 – 2012-03-22 13:02:38