Python 从列表中的元组访问第n个元素,但元组的长度不同

Python 从列表中的元组访问第n个元素,但元组的长度不同,python,list,tuples,Python,List,Tuples,例如,我有一个这样的元组列表,第一个元组的最后一个元素是空的: data=[('1',),('2','3'),('6','5'),('3','4')] 我想得到每个元组的最后一个元素,我使用这样的方法,对于数据中的I,j,如果j不是空的,那么将j作为列表: lastelemtent=list(set([j for i,j in data if j]))[0] 我得到错误:没有足够的值来解包(预期为2,得到1) 我想得到这样的结果:lastelement=['3'、'5'、'4']您可

例如,我有一个这样的元组列表,第一个元组的最后一个元素是空的:

data=[('1',),('2','3'),('6','5'),('3','4')]
我想得到每个元组的最后一个元素,我使用这样的方法,对于数据中的I,j,如果j不是空的,那么将j作为列表:

    lastelemtent=list(set([j for i,j in data if j]))[0]
我得到错误:
没有足够的值来解包(预期为2,得到1)

我想得到这样的结果:
lastelement=['3'、'5'、'4']
您可以使用语法
something[-1]
来选择元组列表的最后一个元素

要从数据中获取每个元组的最后一个元素,必须运行

lastelement = [e[-1] for e in data]

您可以使用语法
something[-1]
选择元组列表的最后一个元素

要从数据中获取每个元组的最后一个元素,必须运行

lastelement = [e[-1] for e in data]
lastelement
将包含此-->[7,3,5,4]


lastelement
将包含此-->[7,3,5,4]

也许您需要每个元组的第二个元素,除非元组较短

[x[1] for x in data if len(x) > 1]

也许您需要每个元组的第二个元素,除非元组较短

[x[1] for x in data if len(x) > 1]

你的前提是错误的。
('1',)
中的“最后一个元素”不是空的,但这只是一个只有一个元素的元组,这就是为什么“没有足够的值来解包”。这也意味着
'1'
既是该元组的第一个元素也是最后一个元素,因此使用索引
[-1]
将起作用(不会产生错误),但可能不会达到预期或想要的效果


如果你想要一个“空”的最后一个元素,也许你可以使用
('1','')
('1',None)

你的前提是错误的。
('1',)
中的“最后一个元素”不是空的,但这只是一个只有一个元素的元组,这就是为什么“没有足够的值来解包”。这也意味着
'1'
既是该元组的第一个元素也是最后一个元素,因此使用索引
[-1]
将起作用(不会产生错误),但可能不会达到预期或想要的效果


如果你想要一个“空”的最后一个元素,也许你可以使用
('1','')
('1',None)

问题是你试图将大小为1的元组
(1,)
解包成大小为2的元组:
i,j
。你可以用


问题是您试图将大小为1的元组解压为大小为2的元组:
i,j
。你可以用


[t[1]如果len(t)==2,则表示数据中的t]
?正如错误告诉您的那样,它无法将
(1,)
解包到
i,j
“第一个元组的最后一个元素是空的:“不,
('1',)
只是一个只有一个元素的元组。如果len(t)>1,那么对于数据中的t,我将其更改为[t[-1],如果len(t)==2],那么它可以工作,感谢@jornsharpe
[t[1]对于数据中的t]
?正如错误告诉您的那样,它无法将
(1,)
解包到
i,j
“第一个元组的最后一个元素是空的:“不,
('1',)
只是一个只有一个元素的元组。如果len(t)>1,则数据中的t将其更改为[t[-1],它可以工作,谢谢@JonRSharpeb,但这不是OP想要的输出如果你检查原始问题,作者没有发布所需的输出,只是一行“我想得到每个元组的最后一个元素”。我在发帖时写下了我的答案。虽然它已经说了“如果j不是空的”,但是列表中的过滤器符合这个意图。对不起,你是对的。即使在第n次阅读中,我也错过了这一部分。但这不是OP想要的输出。如果你检查原始问题,作者没有发布所需的输出,只是一行“我想要得到每个元组的最后一个元素”。我在发帖时写下了我的答案。虽然它已经说了“如果j不是空的”,但是列表中的过滤器符合这个意图。对不起,你是对的。即使是第n次阅读,我也错过了那部分。