2014-02-15 2 views
0

Это сообщение следует мой предыдущий вопрос здесь: Split list into different variablesPython - Сохранение различного количества элементов в списке?

я понял, что я хотел бы иметь несколько кусков элементов в списке, и они не всегда могут быть ограничены до 3. Например, я мог бы иметь:

[('love', 'yes', 'no'), ('valentine', 'no', 'yes'), ('day', 'yes','yes'), 
    ('house', 'yes','no'), ('car', 'yes','yes')] 

[('love', 'yes', 'no'), ('valentine', 'no', 'yes'), ('day', 'yes','yes'), 
    ('house', 'yes','no'), ('car', 'yes','yes'), ('balloon', 'no','no'), 
    ('roses', 'yes','yes')] 

var1, var2, var3 = listobj работает нормально только для трех из этих элементов. Но для большего, в общем, как я буду хранить все эти куски элементов в разные переменные?

+0

Вам действительно нужно хранить все элементы в переменных _different_? Невозможно ли выбрать элемент из списка? – devnull

+0

Yup, это облегчит мне работу с кусками данных – Eagle

+0

Нет, это не так. Потому что, как вы говорите: у вас не всегда есть три элемента, поэтому вам придется иметь дело с переменным числом переменных. Это не так просто. – poke

ответ

4

Переменные объявляются явно в вашем коде, поэтому числа переменных, которые вы могли бы использовать, являются определенными, нет возможности распаковать кортеж (или список) с неизвестной длиной до определенного количества варов. Но вы можете использовать * сделать extended iterable unpacking в Python3:

>>> a, *b, c = range(5) 
>>> a 
0 
>>> c 
4 
>>> b 
[1, 2, 3] 
+0

Хорошая идея. Однако я решил свою проблему, используя эту строку: 'allCols = [[] для x в диапазоне (0, colCount)]' где 'colCount' - количество столбцов в строке. Затем я просто указываю индекс, который я хочу получить в 'allCols [colCount-1]', чтобы извлечь последний набор элементов или любой набор. – Eagle

+0

@Eagle да, это обычный способ ссылаться на элементы в итерабельной – zhangxaochen

0

Если длина listobj неопределенна, использовать его непосредственно в виде списка вместо его распаковки в переменные.

Распаковка списка различных размеров не имеет никакого смысла. Предположим, вы могли динамически распаковывать listobj на максимально возможное количество переменных (например, var1, var2, var3 ... столько, сколько необходимо). Как бы вы написали код, который использует эти переменные? Вам вдруг нужно будет узнать их количество и какой-нибудь умный способ индексировать конкретный или перебрать их. И угадайте, что именно, именно поэтому у вас есть списки в первую очередь.

Смежные вопросы