Ссылка на элемент в списке кортежей - PullRequest
20 голосов
/ 23 июня 2011

Извините, но я новичок в Python.У меня есть список tuples, и мне было интересно, как я могу ссылаться, скажем, на первый элемент каждого tuple в списке.Я думаю, это что-то вроде

for i in number_of_tuples :
  first_element = myList[i[0]]

Знаете, [list_element[tuple_element]]?Тем не менее, это не правильный подход.Любая помощь будет принята с благодарностью.

Спасибо,

Тернер

Ответы [ 7 ]

37 голосов
/ 23 июня 2011

Все остальные ответы здесь верны, но не объясняют, почему то, что вы пытались, было неверным. Когда вы делаете myList[i[0]], вы говорите Python, что i - это кортеж, и вы хотите, чтобы значение или первый элемент кортежа i были индексом для myList.

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

Это быстрый элементарный пример, который я придумал:

info = [ ( 1, 2), (3, 4), (5, 6) ]

info[0][0] == 1
info[0][1] == 2
info[1][0] == 3
info[1][1] == 4
info[2][0] == 5
info[2][1] == 6
30 голосов
/ 23 июня 2011

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

>>> my_tuples = [(1, 2, 3), ('a', 'b', 'c', 'd', 'e'), (True, False), 'qwerty']
>>> first_elts = [x[0] for x in my_tuples]
>>> first_elts
[1, 'a', True, 'q']
4 голосов
/ 23 июня 2011

код

my_list = [(1, 2), (3, 4), (5, 6)]
for t in my_list:
    print t

печать

(1, 2)
(3, 4)
(5, 6)

Цикл повторяется по my_list и присваивает элементы от my_list до t один за другим. Элементы my_list являются кортежами, поэтому t всегда будет кортежем. Чтобы получить доступ к первому элементу кортежа t, используйте t[0]:

for t in my_list:
    print t[0]

Чтобы получить доступ к первому элементу кортежа с указанным индексом i в списке, вы можете использовать

print my_list[i][0]
3 голосов
/ 23 июня 2011

Вы также можете использовать itemgetter оператор:

from operator import itemgetter
my_tuples = [('c','r'), (2, 3), ('e'), (True, False),('text','sample')]
map(itemgetter(0), my_tuples)
3 голосов
/ 23 июня 2011

Вместо:

first_element = myList[i[0]]

Вы, вероятно, хотите:

first_element = myList[i][0]
1 голос
/ 17 августа 2017

Вот краткий пример:

termList = []
termList.append(('term1', [1,2,3,4]))
termList.append(('term2', [5,6,7,8]))
termList.append(('term3', [9,10,11,12]))

result = [x[1] for x in termList if x[0] == 'term3']

print(result)
1 голос
/ 19 февраля 2015

Итак, у вас есть «список кортежей», позвольте мне предположить, что вы манипулируете некоторой двумерной матрицей, и, в этом случае, один удобный интерфейс для достижения того, что вам нужно, - это тот, который numpy предоставляет.

Допустим, у вас есть массив arr = numpy.array([[1, 2], [3, 4], [5, 6]]), вы можете использовать arr[:, 0], чтобы получить новый массив всех первых элементов в каждом "кортеже".

...