Python 如何在变量更改时中断循环
我正在运行一个for循环,其中迭代器循环遍历基于时间的值列表 例如,这就是我的列表的样子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:
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+来说应该是=代码>太好了。也许你应该在你的回答中明确指出,这是唯一的答案,它给出了问题的答案,并且是来自一个新的贡献者