Как я могу выполнить итерации только по первой переменной кортежа

В Python, когда у Вас есть список кортежей, можно выполнить итерации по ним. Например, когда у Вас есть 3-и точки затем:

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

Что, если Вы только хотите использовать первую переменную, или первое и третье. Там кто-либо пропускает символ в Python?

6
задан Peter Smit 18 June 2010 в 03:13
поделиться

5 ответов

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

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

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

8
ответ дан 8 December 2019 в 04:28
поделиться

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

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

Это не совсем "пропуск", просто соглашение. Переменная с подчеркиванием все равно получает присвоенное значение:

>>> _
3
7
ответ дан 8 December 2019 в 04:28
поделиться

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

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

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

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

5
ответ дан 8 December 2019 в 04:28
поделиться

В 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
1
ответ дан 8 December 2019 в 04:28
поделиться

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

for each in points:
    x = each[0]
    # do something with x
4
ответ дан 8 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: