Как получить доступ к элементу кортежа в списке кортежей

#python #list #tuples

#python #Список #кортежи

Вопрос:

Я новичок в Python и занимаюсь некоторыми практическими.

У меня есть список кортежей кортежей (каждый кортеж имеет 3 подкорпуса), как показано ниже:

 ABC = [   (('The', 'AT'), ('Fulton', 'NP-TL'), ('County', 'NN-TL')),   

(('Fulton', 'NP-TL'), ('County', 'NN-TL'), ('Grand', 'JJ-TL')), 

(('County', 'NN-TL'), ('Grand', 'JJ-TL'), ('Jury', 'NN-TL')), 

(('Grand', 'JJ-TL'), ('Jury', 'NN-TL'), ('said', 'VBD')), 

(('Jury', 'NN-TL'), ('said', 'VBD'), ('Friday', 'NR'))   ]
  

Мне нужно извлечь второе значение подкортежа в каждом кортеже, т.Е. 3 значения, и получить их в виде кортежа, который будет добавлен в список.

Пожалуйста, помогите, как это получить.

Ожидаемый результат:

Мне нужен новый список, полученный из него как:

  ABC_subset = [('AT','NP-TL', 'NN-TL'),

('NP-TL','NN-TL', 'JJ-TL'),

('NN-TL','JJ-TL', 'NN-TL'),

('JJ-TL','NN-TL', 'VBD'),

('NN-TL','VBD', 'NR')] 
  

Я пытаюсь что-то вроде этого:

  ABC_subset = [(t[1],u[1],v[1]) for tup in ABC for t,u,v in tup]
  

Но это не дает ожидаемого ответа.

Ответ №1:

Используйте понимание списка, подобное:

 output = [tuple(j[1] for j in i) for i in inputlist]
  

Вам нужно будет преобразовать второе выражение в кортеж, иначе оно будет выводить объект генератора

Ответ №2:

Допустим, ваш первый список — это orig , а второй список, который вы хотите, — это newlist . Это можно сделать очень просто с помощью понимания списка:

 newlist = [tuple(j[1] for j in i) for i in orig]
  

По сути, выполните итерацию по каждой строке i orig и извлеките второй элемент из каждого кортежа j в этой строке.

Комментарии:

1. Это вернет список генераторов.

2. Это справедливо. Я добавил приведение к tuple , которое должно это исправить.

Ответ №3:

 [(x[1] for x in y) for y in your_list]
  

Комментарии:

1. Это вернет список генераторов. Кроме того, было бы неплохо добавить некоторые пояснения к коду.