Доступ к n-му элементу из кортежей в списке, но длина кортежа отличается - PullRequest
0 голосов
/ 11 февраля 2020

Например, у меня есть список таких кортежей, последний элемент первого кортежа пуст:

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

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

    lastelemtent=list(set([j for i,j in data if j]))[0]

Я получаю ошибку: not enough values to unpack (expected 2, got 1) Я хочу получить результат как: lastelemtent=['3','5','4'].

Ответы [ 5 ]

2 голосов
/ 11 февраля 2020

Вы можете использовать синтаксис something[-1], чтобы выбрать последний элемент списка кортежей.

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

lastelement = [e[-1] for e in data]
1 голос
/ 11 февраля 2020

Возможно, вам нужен второй элемент каждого кортежа, кроме случаев, когда кортеж короче.

[x[1] for x in data if len(x) > 1]
0 голосов
/ 11 февраля 2020

Проблема в том, что вы пытаетесь распаковать кортеж размера 1 (1,) в кортеж размера 2: i, j. Вы можете использовать расширенную повторяемую распаковку

lastelemtent = [j for *i, j in data if i]
0 голосов
/ 11 февраля 2020

Ваша предпосылка неверна. «Последний элемент» в ('1',) не пустой, но это просто кортеж только с одним элементом, поэтому вы получаете «недостаточно значений для распаковки». Это также означает, что '1' является одновременно первым и последним элементом этого кортежа, поэтому использование индекса [-1] будет работать (не выдавать ошибку), но может не выполнять то, что вы ожидаете или хотите.

Если вы хотите «пустой» последний элемент, возможно, вы можете использовать ('1', '') или ('1', None).

0 голосов
/ 11 февраля 2020
data=[('1',7),('2','3'),('6','5'),('3','4')]
lastelement = [i[-1] for i in data]

lastelement будет содержать это -> [7,3,5,4]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...