2015-02-05 119 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