循环遍历1-D列表中的2-D列表

时间:2014-07-10 07:42:14

标签: python for-loop

我有2个名单:

  • 一维:x_int_loc = [0,1,2,3,4,5]
  • 二维:xtremes = [[0,2],[0,3],[1,3],[1,5],[2,5],[3,6],[4,8]]

我正在尝试收集x_int_loc中每个元素在xtremes列表中的值范围内的次数。也就是说,1(在列表x_int_loc中)的计数将为2,因为它显示在[0,2][0,3]中,依此类推。

虽然这看起来很简单,但在循环浏览这些列表时我有点卡住了。这是我的代码:

for i in range(len(x_int_loc)):
    while k < len(xtremes):
        if x_int_loc[i]>xtremes[k][0] and xtremes[k][1] > x_int_loc[i]:
            count[i] = count[i]+1
print(count[:])

你们有没有人能告诉我哪里出错了?

2 个答案:

答案 0 :(得分:2)

您永远不会递增k,或在i递增时重置它。最小的修复是:

for i in range(len(x_int_loc)):
    k = 0
    while k < len(xtremes):
        if x_int_loc[i]>xtremes[k][0] and xtremes[k][1] > x_int_loc[i]:
            count[i] = count[i]+1
        k += 1

使用带有手动索引的while循环不是一个好习惯;正如这清楚地表明,它容易出错。为什么不直接for循环xtremes?你真正需要的只是:

count = [sum(x < n < y for x, y in xtremes) for n in x_int_loc]

给了我:

>>> count
[0, 2, 3, 2, 3, 2]

答案 1 :(得分:1)

除非您过于专注于优化,否则在一般情况下,以下解决方案将是最佳的

>>> x_int_loc = [0,1,2,3,4,5]
>>> xtremes = [[0,2],[0,3],[1,3],[1,5],[2,5],[3,6],[4,8]]
>>> xtremes_ranges = [xrange(r[0]+1,r[1]) for r in xtremes]
>>> [(x, sum(x in r for r in xtremes_ranges)) for x in x_int_loc]
[(0, 0), (1, 2), (2, 3), (3, 2), (4, 3), (5, 2)]