#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. Это вернет список генераторов. Кроме того, было бы неплохо добавить некоторые пояснения к коду.