Еще одно объяснение. Как программист, вы, вероятно, понимаете разницу между классами против экземпляров (т. Е. Объекты). zip()
называется встроенной функцией (в официальном документе). На самом деле, это встроенная функция генератора . Это означает, что это скорее класс. Вы даже можете попробовать в интерактивном режиме:
>>> zip
Классы - это типы. Из-за этого также должно быть ясно следующее:
>>> type(zip)
Ваш z
является экземпляром класса, и вы можете думать о вызове zip()
как о вызове конструктора класса:
>>> a = [1, 2, 3]
>>> b = [7, 8, 9]
>>> z = zip(a, b)
>>> z
>>> type(z)
z
- итератор (объект), который хранит внутри итераторов для a
и b
. Из-за своей общей реализации класс z
(или zip
) не имеет никакого значения для сброса итераторов через a
или b
или любые последовательности. Из-за этого нет возможности сбросить z
. Самый чистый способ решить вашу конкретную проблему - скопировать список (как вы упомянули в вопросе и Леннарт Регебро предлагает ). Другим понятным способом является использование zip(a, b)
дважды, создавая таким образом два итератора z
, которые ведут себя с самого начала таким же образом:
>>> lst1 = list(zip(a, b))
>>> lst2 = list(zip(a, b))
Однако это невозможно использовать вообще с идентичным результатом . Подумайте, что a
или b
являются уникальными последовательностями, генерируемыми на основе некоторых текущих условий (например, температуры, считанные с нескольких термометров).
Правила Прометея оценивают в текущий момент времени , данные облачных часов часто очень сильно задерживаются, поэтому, хотя вы можете получить график исторических данных, значение текущих данных всегда равно нулю.
Вы можете исправить это, добавив смещение, например:
(
max(aws_sqs_approximate_number_of_messages_visible_average{queue_name="queue-1"} offset 10m)
+ max(aws_sqs_approximate_number_of_messages_not_visible_average{queue_name="queue-2"}) offset 10m)
/ sum(kube_pod_container_status_ready{container="worker"} offset 10m
)