Как я могу перебирать только первую переменную кортежа

В python, когда у вас есть список кортежей, вы можете перебирать их. Например, когда у вас есть 3d точки, тогда:

for x,y,z in points:
    pass
    # do something with x y or z

Что делать, если вы хотите использовать только первую переменную или первую и третью. Есть ли в питоне символ пропуска?


person Peter Smit    schedule 17.06.2010    source источник


Ответы (5)


Что-то мешает вам не трогать переменные, которые вас не интересуют? В Python обычно используется подчеркивание для обозначения переменной, которая вас не интересует. Например.:

for x, _,_ in points:
    print(x)

Вы должны понимать, что это всего лишь соглашение и не имеет никакого отношения к производительности.

person SilentGhost    schedule 17.06.2010
comment
Это был пример. Обычно у меня может быть 4 переменных в кортеже, и мне лень придумывать для них новые хорошие имена переменных. - person Peter Smit; 17.06.2010
comment
@Peter: Вам не обязательно иметь хорошие имена для переменных, которые вы не собираетесь использовать. - person SilentGhost; 17.06.2010
comment
На самом деле _, вероятно, наименее описательное имя переменной, которое вы могли бы придумать ;-) Или оно было бы им, если бы не это соглашение. - person David Z; 17.06.2010
comment
Хорошо, еще одна причина. Помимо придумывания хорошего имени для чего-то, что я не использую, моя IDE предупредит меня о неиспользуемых локальных переменных, если я просто что-то там придумаю. Подчеркивание работает хорошо! - person Peter Smit; 18.06.2010

Да, подчеркивание:

>>> a=(1,2,3,4)
>>> b,_,_,c = a
>>> b,c
(1, 4)

Это не совсем «пропуск», просто условность. Переменная подчеркивания по-прежнему получает назначенное значение:

>>> _
3
person unbeli    schedule 17.06.2010
comment
Информация о _ интересна. Так что a, a, a = (1, 2, 3) действительно работает... - person Dario; 17.06.2010
comment
@Дарио, я бы не рекомендовал этого, так как трудно прочитать и понять, какое значение вы ожидаете в - person unbeli; 17.06.2010
comment
Да, я бы даже не стал использовать его по этой причине, но я думал, что Python его запретит. - person Dario; 17.06.2010
comment
@Dario: запретить это (вы не определили это) потребовало бы основных усилий разработчика, которые почти все согласятся, что лучше потратить их в другом месте ... хотелось бы увидеть ваши предлагаемые изменения в грамматике Python. - person John Machin; 18.06.2010

Обычный способ сделать это — использовать символы подчеркивания для неиспользуемых переменных:

for x, _, z in points:
    # use x and z

Это на самом деле не делает ничего отличного от того, что вы написали. Подчеркивание — это обычная переменная, как и любая другая. Но это показывает людям, читающим ваш код, что вы не собираетесь использовать эту переменную.

Не рекомендуется делать это в интерактивной подсказке, так как _ имеет там особое значение: значение последнего оператора/выражения.

person Mark Byers    schedule 17.06.2010

Хотя это не так гладко, как вы просите, возможно, это наиболее понятно для ваших намерений давать значимые имена только интересующим вас индексам кортежей:

for each in points:
    x = each[0]
    # do something with x
person stw_dev    schedule 17.06.2010

В Python 3.1 вы можете использовать звездочку перед идентификатором в левой части назначения кортежа, и все, что осталось, будет поглощено. Эта конструкция будет обрабатывать переменное количество элементов кортежа. Как это:

>>> tpl = 1,2,3,4,5
>>> a, *b = tpl
>>> a
1
>>> b
>>> (2, 3, 4, 5)

Или в различных порядках и сочетаниях:

>>> a, *b, c = tpl
>>> a
1
>>> b
(2, 3, 4)
>>> c
5

Итак, для случая, о котором вы спрашивали, когда вас интересует только первый элемент, используйте *_, чтобы высосать и отбросить оставшиеся элементы, которые вам не нужны:

>>> a, *_ = tpl
>>> a
1
person Don O'Donnell    schedule 19.06.2010