将值与列表进行比较

时间:2017-08-03 20:11:02

标签: python python-2.7

我正在处理我的代码,因为我正在使用按钮宽度和像素进行计算以将其添加到一起以获取值。我正在尝试在计算时将值与列表进行比较,以查看值是接近,高于还是等于。

以下是代码:

CurrentRows = [375, 441, 507, 559, 610, 669, 724, 790, 838, 844, 849, 897, 910, 949, 959, 1009, 1016, 1018, 1019, 1072, 1125, 1138, 1184, 1186, 1189, 1238, 1246, 1286, 1419, 1620, 1762, 1840, 1943]

nextprogram = int(program_id) + 1
nextprogram1 = int(nextprogram) + 1
nextprogram2 = int(nextprogram1) + 1
nextprogram3 = int(nextprogram2) + 1
program_button_1 = self.getControl(int(program_id))
program_button_2 = self.getControl(int(nextprogram))
program_button_3 = self.getControl(int(nextprogram1))
program_button_4 = self.getControl(int(nextprogram2))

width = program_button_1.getWidth()
pos_X = pos_X + width + 5

for pos_X1 in CurrentRows:
   if pos_X1 >= pos_X:
      pos_X = pos_X1
      break

program_button_2.setPosition(pos_X, pos_Y)
width = program_button_2.getWidth()
pos_X = pos_X + width + 5

for pos_X1 in CurrentRows:
    if pos_X1 >= pos_X:
       pos_X = pos_X1
       break

program_button_3.setPosition(pos_X, pos_Y)
width = program_button_3.getWidth()
pos_X = pos_X + width + 5


for pos_X1 in CurrentRows:
    if pos_X1 >= pos_X:
       pos_X = pos_X1
       break

当变量pos_X显示接近1184的值1194时,我想从列表中获取1184的值。当值显示为1083时,我想从列表中获取1073,但是当列表中的值显示1125时,我希望从列表中获取1125

我的代码如何做到这一点?

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点 - 我只列出了一些。第一个是我最喜欢的方式,但如果您担心的话,它可能不是最有效的方式:

def highest(maximum):
    return max([row for row in CurrentRows if row <= maximum])

下一个也使用max,但只需要在行列表上进行一次传递。

def highest(maximum):
    return max(CurrentRows, key=lambda x: x if x <= maximum else 0)

如果出于某种原因你不喜欢max,你可以随时迭代列表并亲自检查。

def highest(maximum):
    best = 0
    for x in CurrentRows:
        if x > maximum:
            return best
        best = x
    return best