拆分列表中的元素并计算给定一周的小时数
Split elements in a list and compute hours for a given week
我有一个字符串表示 EC2 实例在一周中的每一天何时开启和何时关闭 - 请参阅附图以供参考。
图像生成的字符串如下:,,4,15,,,4,9,,,5,10,,
我想拆分此字符串并计算 EC2 实例处于 "power on" 状态的小时数。
在这种情况下,我认为它将是 (15-4) + (9-4) + (10-5) = 12。
仍在学习 Python,所以我确信我可以想出一种蛮力方法来计算它。但是,我正在寻找 "elegant" 解决方案的指针,其中我没有使用太多循环。
请保持安全并保持友善。
以下方法可以解决问题:
s = ",,4,15,,,4,9,,,5,10,,"
tokens = (int(t) for t in s.split(',') if t)
sum(y - x for x, y in zip(tokens, tokens))
# 21
tokens
是对字符串中编码的所有整数的迭代器。通过 zipping
它自身,我们得到连续的相邻对,我们可以 sum
克服它们的差异。或者,如果您更喜欢列表和切片:
tokens = [int(t) for t in s.split(',') if t]
sum(tokens[1::2]) - sum(tokens[::2])
# 21
我有一个字符串表示 EC2 实例在一周中的每一天何时开启和何时关闭 - 请参阅附图以供参考。
图像生成的字符串如下:,,4,15,,,4,9,,,5,10,,
我想拆分此字符串并计算 EC2 实例处于 "power on" 状态的小时数。
在这种情况下,我认为它将是 (15-4) + (9-4) + (10-5) = 12。
仍在学习 Python,所以我确信我可以想出一种蛮力方法来计算它。但是,我正在寻找 "elegant" 解决方案的指针,其中我没有使用太多循环。
请保持安全并保持友善。
以下方法可以解决问题:
s = ",,4,15,,,4,9,,,5,10,,"
tokens = (int(t) for t in s.split(',') if t)
sum(y - x for x, y in zip(tokens, tokens))
# 21
tokens
是对字符串中编码的所有整数的迭代器。通过 zipping
它自身,我们得到连续的相邻对,我们可以 sum
克服它们的差异。或者,如果您更喜欢列表和切片:
tokens = [int(t) for t in s.split(',') if t]
sum(tokens[1::2]) - sum(tokens[::2])
# 21