Дополнительно
Как распаковать кортеж длины n в m
В Python 3 я могу сделать следующее (см. также PEP3132 о расширенной распаковке итерабельных файлов):
a, *b = (1, 2, 3)
# a = 1; b = (2, 3)
Что я могу сделать, чтобы добиться такого же элегантного результата в Python 2.x?
Я знаю, что могу использовать одноэлементный доступ и операции нарезки, но мне интересно, есть ли более питонический способ. Мой код на данный момент:
a, b = (1, 2, 3)[0], (1, 2, 3)[1:]
# a = 1; b = (2, 3)
45
5
Я узнал, что соответствующие PEP3132 дает некоторые примеры для Python 2.X, а также:
Другие подходы приведенный в ответах на этот вопрос:
Список Аргументов Функции Распаковки Подход
требует дополнительного определения функции/вызов:
Интересно, почему он реализуется в распаковке функции список аргументов, но не для нормальной распаковки кортежа.
Подход Генератор
Авторы. Также требует пользовательской реализации функции. Это немного более гибким относительно числа переменных first.
Наиболее подходящие для Python, вероятно, будут те, которые упомянуты в выше Пеп, я думаю?
Я могу ошибаться, но насколько я знаю.
это просто синтаксический сахар для нарезки и индексирования кортежей. Я нахожу его полезным, но не очень явным.
Я'ве получил этой маленькой, но удобной функции:
Например:
также работает с меньшей аргументы:
В ответ на комментарий, можно также определить:
и использовать его как это:
Я не думаю, что есть лучший способ, чем тот, который вы опубликовали, но вот альтернативный вариант с использованием
iter
.Не уверен в контексте, но как насчет .pop(0)?
Я вижу, что в вашем примере есть кортежи, но если вы хотите делать то, что вы делаете, списки были бы более подходящими, я думаю? (Если только нет какой-то веской причины для того, чтобы они были неизменяемыми, не указанной в вопросе).