使用for循环时代码保持触发7次

时间:2014-12-25 16:22:04

标签: python python-2.7

我正在处理我的python脚本,因为我存储了数组中的元素列表。

我在for循环中运行代码时遇到了问题。

当我尝试这个时:

program_X = list()
program_time = list()

for ind, row in enumerate(programs):
    program_X.append(position_start)
    program_length = minutes_length
    program_time.append(program_length)

program_X = map(str, program_X)
program_time = map(str, program_time)


#get the list of position_X for all buttons
for pos_X in program_X:

    #find the position with 375
    if pos_X == '375':
       print program_time

它将打印7次元素列表,它应该是一次:

16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]
16:16:57 T:6044  NOTICE: ['30', '150', '180', '60', '30', '30', '30', '30', '30', '30'...etc]

如果我在program_time循环之外使用for pos_X,它将仅打印元素列表一次而不打印7次。我想在program_time中使用for pos_X,以便我可以开始计算当时的代码。

您能否帮助我如何在program_time循环中使用for pos_X只打印一次元素列表而不重复7次?

编辑:当我尝试这样做时,我无法传递if语句:

#get the list of position_X for all buttons
for pos_X in set(program_X):

    #find the position with 375
    if pos_X == '375':
       program_lengths = program_time

       if program_lengths >= '30':
          print "hello 1"
          continue

2 个答案:

答案 0 :(得分:0)

如果没有看到代码段的整个上下文,很难分辨,但有一些明显的问题:

for ind, row in enumerate(programs):
    program_X.append(position_start)
    program_length = minutes_length
    program_time.append(program_length)

遍历programs(无论是什么),然后将完全相同的值附加到列表program_Xprogram_time - 因为您需要在每次迭代中使用相同的变量(position_startminutes_length)。因此,如果position_start375programs有7项,那么您将获得相同的输出7次。

答案 1 :(得分:0)

这种情况正在发生,因为program_X包含多个375值的元素。查看代码时,只有在program_time等于pos_X时才打印375。您还需要输出一次。因此,实现它的最佳方法是在break指令之后使用print program_time语句:

for pos_X in program_X:

    #find the position with 375
    if pos_X == '375':
       print program_time
       break              

另一种方法是使用program_X迭代set()的唯一值:

for pos_X in set(program_X):

    #find the position with 375
    if pos_X == '375':
       print program_time

看看你的帖子的编辑,我得到了你想要实现的一些暗示。使用以下代码删除整个代码的第二个for loop。看看它是否有帮助,然后我会向你解释:

prog_Xtime = dict(zip(program_X,program_time))
for pos_X in prog_Xtime:
    if pos_X == '375':
       if prog_Xtime[pos_X] >= '30':
          print "hello 1"