2015-02-05 134 views
0
a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
print output 

此代码使用条件搜索2个列表。如果列表b中的列表a AND(元素n + 1) - (元素n)< = 3中的元素n ==元素n + 1,则它打印结果。我遇到的问题是它切断了一个应该打印的元素。 (即此代码将输出使用for循环和条件语句搜索python列表

[(1, 20150602), (1, 20150603), (4, 20150605), (4, 20150606)] 

而应输出

[(1, 20150602), (1, 20150603), (1,20150604), (4, 20150605), (4, 20150606), (4, 20150607)]) 
+1

对于每个“集合”中的第三个元素,由于下一个元素没有匹配的“a”,所以您的条件不再成立。 – tzaman 2015-02-05 21:32:43

回答

0

见第二次追加到输出列表:)

In [14]: 

a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
     output.append(c[i+1]) 
    output = sorted(list(set(output))) 
print output 



[(1, 20150602), (1, 20150603), (1, 20150604), (4, 20150605), (4, 20150606), (4, 20150607)] 
+1

这将导致重复。 – tzaman 2015-02-05 21:31:42

+0

是的,打印重复......获得额外的值,但打印重复以及。 – fORzoas 2015-02-05 21:38:33

+0

我更新了答案。假设列表中的所有项目都是唯一的。 – Andrew 2015-02-05 21:39:07

0
a = [1,1,1,4,4,4,5] 
b = [20150602, 20150603, 20150604, 20150605, 20150606, 20150607,20150608] 
c = zip(a,b) 

output = [] 
for i in range(0, len(c)-1): 
    if c[i][0] == c[i+1][0] and c[i+1][1] - c[i][1] <= 3: 
     output.append(c[i]) 
    elif c[i][0] != c[i+1][0]: 
     print 'equality failed for numbers: %d and %d' % (c[i][0], c[i+1][0]) 
    elif c[i+1][1] - c[i][1] > 3: 
     print 'Subtraction is greater than three for: %d and %d' % (c[i][1], c[i+1][1]) 

print output 

输出:

equality failed for numbers: 1 and 4 
equality failed for numbers: 4 and 5 
[(1, 20150602), (1, 20150603), (4, 20150605), (4, 20150606)] 

你缺少两个元素的原因是因为当i在for循环2 c[i][0]将返回1.现在,当执行if语句的这一部分:c[i][0] == c[i+1][0]返回false因为c[i][0]返回1和c[i+1][0]回报4,他们不相等。当i等于5时会发生同样的情况。

+0

稍后我会再看看这个......但是这个解决方案打印的信息太多了.....不需要关于失败迭代的打印声明.......另外,还没有需要比较列表中的整数.......唯一的要求是找到List 1(n)== List1(other n)和List 2(other n) - List 2(n)<= 3 – fORzoas 2015-02-05 22:12:46

+0

这绝不是一个解决方案,但试图解释为什么你没有得到你想要的输出 – Harpal 2015-02-05 23:14:22