创建一个固定步骤但没有固定限制的python列表

时间:2017-05-07 00:03:24

标签: python list range

我对list有疑问。我的列表需要在中点附近,最小值为1,并且在中点附近需要6个整数步长(+/-),步长为1.列表中将有7位数(中点+6步)。 / p>

例如,if mid = 10,然后是list = [7,8,9,**10**,11,12,13]。 10以上3步,10以下3步。 但是if mid = 3,数字不能均匀地分布在中点上方和下方3个步骤,因为最小值为1.确保列表中的7个项目,3个以上的4个步骤以及3个以下的2个步骤。因此,[1,2,**3**,4,5,6,7]。如果mid=2,则高于2的5步和低于2的1步。列表仍为[1,**2**,3,4,5,6,7] 这是我的代码:

def gain_range(mid):

    gainLower_list = list(range(1, mid)) #items under the midpoint
    gainUpper_list = list(range(mid, n)) #items above the midpoint, hence I can combine the two lists later
    if mid >= 4:
       n = mid + 3
    elif mid >= 3:
       n = mid + 4
    elif mid >= 2:
       n = mid + 5
    elif mid >= 1:
       n = mid + 6        

gain_range(3)

但是此代码会出错:

  

UnboundLocalError:局部变量' n'在分配前引用

我该如何解决这个问题?是否有更优雅的方法来创建具有固定步骤的列表,而不是固定限制?

2 个答案:

答案 0 :(得分:1)

唯一需要的决定是起始值必须> = 1,所以首先计算,然后从var slideToAdd = '<div><img src="http://placehold.it/150x150"></div>'; if(dataOffline.logo !== null){ slideToAdd = '<div class="iimg"><img src="' + dataOffline.logo + '"></div>'; } var offline = $('.offline'); if(offline.hasClass('slick-initialized')){ offline.slick('slickAdd',slideToAdd); } else { offline.append(slideToAdd); offline.slick(); } 返回list

<强>代码:

range

测试代码:

def gain_range(mid):
    start = max(1, mid - 3)
    return list(range(start, start+7))

<强>结果:

print(gain_range(3))
print(gain_range(4))
print(gain_range(5))

答案 1 :(得分:0)

这里只是解决错误:在声明代码之前,在代码中使用变量n

def gain_range(mid):

    gainLower_list = list(range(1, mid))
    gainUpper_list = list(range(mid, n))  # use n here but is hasnt been declared and assigned a value
    if mid >= 4:
       n = mid + 3
    elif mid >= 3:
       n = mid + 4
    elif mid >= 2:
       n = mid + 5
    elif mid >= 1:
       n = mid + 6

在此之前,您需要为n分配一个值...

然而,如果你只想要6个均匀分布的连续数字mid至少为1,那么我上面的答案(Steven Rausch)应该可以做到这一点