2009-01-10 4 views
6

Как я могу распаковать кортеж неизвестного, скажем, списка?Python: распаковать неизвестное количество переменных?

У меня есть несколько столбцов данных, и они могут быть разделены на кортеж некоторой функцией. Я хочу распаковать этот кортеж на переменные, но я не знаю, сколько столбцов у меня будет. Есть ли способ динамически распаковать его на столько переменных, сколько мне нужно?

Спасибо за вашу помощь :)

ответ

7

Распакуйте кортеж в список?

l = list(t) 
+0

Но мне любопытно, почему вы хотите это сделать. =) – PEZ

+0

PEZ, я создаю скрипт для обработки множества графиков с использованием функции numpy «loadtxt». Количество столбцов данных известно только во время выполнения, поэтому я не могу создавать имена переменных. – Nope

+1

Да, но если у вас есть данные в кортеже, которые вы часто можете работать с ним, как и с помощью списка. t [1] предоставит вам те же данные, что и l [1] без «распаковки». Конечно, если вы изменяете данные «на месте» вам нужен список. – PEZ

3

Вы хотите создать переменные на лету? Как ваша программа будет знать, как ссылаться на них, если они динамически создаются?

Кортежи имеют длины, точно так же, как списки. Это совершенно позволительно сделать что-то вроде:

total_columns = len(the_tuple) 

Вы можете также преобразовать кортеж в список, хотя нет никакой выгоды делать это, если вы не хотите, чтобы начать изменение результатов. (. Кортежи не могут быть изменены, списки могут) Но, в любом случае, преобразование кортежа в список тривиально:

my_list = list(the_tuple) 

Там являются способами создания переменных на лета (например, с eval), но опять же, как бы вы знали, как обращаться к ним?

Я думаю, вы должны прояснить, что именно вы пытаетесь сделать здесь.

16

Вы можете использовать звездочку, чтобы распаковать переменную длину. Например:

foo, bar, *other = funct() 

Это должно поставить первый элемент в foo, второй в bar, а все остальное в other.

Обновление: Я забыл упомянуть, что это только Python 3.0.