Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在变量更改时中断循环_Python_Loops_Variables - Fatal编程技术网

Python 如何在变量更改时中断循环

Python 如何在变量更改时中断循环,python,loops,variables,Python,Loops,Variables,我正在运行一个for循环,其中迭代器循环遍历基于时间的值列表 例如,这就是我的列表的样子 lst = ['00:00:01', '00:00:05', '00:00:07', '00:01:10', ... , '00:20:23'] 我想检查时间数据的分钟部分是否更改。如果它改变了,那么就打破循环 这是到目前为止我的代码 time_lst = [] for time in lst: minute = time[3:5] if minute changes:

我正在运行一个for循环,其中迭代器循环遍历基于时间的值列表

例如,这就是我的列表的样子

lst = ['00:00:01', '00:00:05', '00:00:07', '00:01:10', ... , '00:20:23']
我想检查时间数据的分钟部分是否更改。如果它改变了,那么就打破循环

这是到目前为止我的代码

time_lst = []

for time in lst:
    minute = time[3:5]

    if minute changes:
        time_lst.append(time)
        break

print(time_lst)
在上述程序中,如何编程if条件


我在网上查看过,但找不到解决此问题的好方法。

您只需保存前一分钟并将其与新值进行比较即可:

previous_minute = lst[0][3:5]
for time in lst:
    minute = time[3:5]
    if previous_minute not minute:
        break
    previous_minute = minute

如果要保存更改的时间:

changed_times = []
previous_minute = lst[0][3:5]
for time in lst:
    minute = time[3:5]
    if previous_minute not minute:
        changed_times.append(time)
    previous_minute = minute
编辑

通过编辑问题,使其在分钟之间保持时间变化

time_lst = []
lastMinute = lst[0][3:5] #so that it won't break on first item
for time in lst:
    minute = time[3:5]

    if minute != lastMinute: # `<>` still usable in python2, `!=` is better for compatibility between python2 and python3
        time_lst.append(time)
    lastMinute = minute

print(time_lst)
time_lst=[]
lastMinute=lst[0][3:5]#这样它就不会在第一项中破裂
对于lst中的时间:
分钟=时间[3:5]
如果一分钟最后一分钟:#`python2中仍然可用,`!=`对于python2和python3之间的兼容性更好
时间附加(时间)
最后一分钟
打印(时间)

您可以将变量保留在循环之外,保持第一分钟。那么测试就很容易了——你可以将新的
分钟
与第一分钟进行比较。一旦他们不平等,就意味着时间发生了变化

first_minute = lst[0][3:5]
for time in lst:
    minute = time[3:5]

    if minute != first_minute:
        break
但是,如果您在循环中所做的只是更新另一个列表,则可以使用列表理解来过滤非分钟的相等时间:

new_list = [time in lst if time[3:5] == lst[0][3:5]]
您还可以将
lst[0][3:5]
保存到
first\u minute
变量,就像我上面所做的那样。另一个修改是使用
filter
lambda t:t[3:5]==lst[0][3:5]

注意:列表理解解决方案过滤所有列表。这意味着,如果在分钟更改之后,如果时间返回到相同的分钟值(可能是不同的小时值?),它也将包括它们,而循环&中断解决方案不会。根据您的需要使用


为了澄清,将第一个解决方案与
lst=[“00:00:00”,“00:00:04”,“00:01:00”,“01:00:02”]
一起使用,将导致只迭代
[“00:00:00”,“00:00:04”]
,而第二个解决方案将给出(对于相同的
lst
[“00:00”,“00:00:04”,“01:00”]
,您需要跟踪最后一个值

有几种方法可以实现这一点。最直接的方法是更新变量

last_value = False
for time in lst:
    minute = time[3:5]
    if not last_value:
        last_value = minute
    else:
        if minute != last_value:
            ...
            break

在开始循环之前保存第一个元素的分钟值。将以下所有值与它进行比较。如果不匹配就断开

prev=lst[0][3:5]
for time in lst:
    if(time[3:5]!=prev):
        break
这应该行得通

for time in lst:
    minute = time[3:5]
    if minute != lst[0][3:5]:
        break
    print minute

在循环开始之前为“分钟”指定一个值。在循环过程中,检查“当前”分钟与“以前”分配的分钟。如果匹配,则继续。如果它们不匹配,则中断。本质上,您需要一个变量,该变量在迭代过程中保持分钟值的“状态”。现在了解如何做到这一点。感谢you@Sashaank如果您的问题得到解决,请标记一个答案。如果您想在列表@sashaank中获得
00:00:50
00:01:10
,请不确定您是否希望跟踪更改前或更改后的时间,如
['00:00:07'、'00:00:50'、'00:01:10']
=?@blueriens
仍然可以在2.7中使用,但对python3+来说应该是
=太好了。也许你应该在你的回答中明确指出,这是唯一的答案,它给出了问题的答案,并且是来自一个新的贡献者