使用 for 循环和条件语句搜索 python 列表


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 个列表。如果列表 a 中的元素 n == 元素 n+1 和(元素 n+1( - (元素 n(<= 列表 b 中的 3 .....它打印结果。我遇到的问题是它切断了应该打印的 1 个元素。(即此代码将输出

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

但应该输出

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

请参阅输出列表的第二个附加项。 :)

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

您缺少两个元素的原因是,当 for 循环中的i为 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 时也会发生同样的情况。

最新更新