2012-03-22 57 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