【发布时间】:2019-03-24 21:48:35
【问题描述】:
我有一个输入整数值的元组,以及一个 high 的值。我想循环并拉出元组中> = high的值的第一个实例对,然后是high的第一个值。一个例子可能会有所帮助:
只保留每个重复高点或低点的第一个高点或第一个低点
例如,如果 max == 100,则输入为 (102, 109, 120, 80, 40, 30, 200 >, 90)
输出应该是 [[102, 80], [200, 90]]
items = (102, 109, 120, 80, 40, 30, 200, 90)
high = 100
started = False # Used to ensure we start with high values first
currently_on_highs = True
first_val_high = True
first_val_low = True
transitions = []
inner_transition = []
for item in items:
if item >= high:
started = True
currently_on_highs = True
if first_val_high:
first_val_high = False
first_val_low = True
inner_transition.append(item)
else:
if started:
currently_on_highs = False
if first_val_low:
first_val_high = True
first_val_low = False
inner_transition.append(item)
transitions.append(inner_transition)
inner_transition = []
print(transitions)
根据@michael-butscher 的建议,这是一个更好的结果
items = (102, 109, 120, 80, 40, 30, 200, 90)
high = 100
in_high = False
transitions = []
inner_transition = []
for item in items:
if item >= high and not in_high:
in_high = True
inner_transition.append(item)
elif item < high and in_high:
in_high = False
inner_transition.append(item)
transitions.append(inner_transition)
inner_transition = []
print(transitions)
【问题讨论】:
-
您只需要一个布尔变量(例如
in_high)。如果您发现一个高值并且in_high为 False,则使用该值开始新的内部转换,将in_high设置为 True。否则,如果值较低且in_high为 True,则关闭内部转换并更改in_high。其他可能的条件不感兴趣。 -
在哪个维度上效率更高?代码行? CPU时间?记忆?您可能可以从所有值中减去 100,然后对符号更改采取行动。
-
谢谢,@michael-butscher
-
谢谢,@schlenk 你给了我一些值得思考的好东西。
-
@djangomachine 我的回答还是比较短。
标签: python list loops for-loop tuples