python解包元组列表

python解包元组列表,python,django,list,tuples,unpack,Python,Django,List,Tuples,Unpack,我使用python/django,我有一个元组(或者元组列表,其实并不重要),基本上它是SQL查询的输出。我这样打印: 如果我有 output= [(a1,b1,c1,d1), (a2,b2,c2,d2), ...] 所以我会: for a,b,c,d in output: ... 现在的问题是,有时我选择了很多列,但我不想全部打印出来。 我可以只解包我需要的值吗。还是因为元组的顺序而受到限制? i、 e我能做些什么,例如: for a, d in output: ... (注

我使用python/django,我有一个元组(或者元组列表,其实并不重要),基本上它是SQL查询的输出。我这样打印:

如果我有

output= [(a1,b1,c1,d1), (a2,b2,c2,d2), ...] 
所以我会:

for a,b,c,d in output:
  ...
现在的问题是,有时我选择了很多列,但我不想全部打印出来。 我可以只解包我需要的值吗。还是因为元组的顺序而受到限制?
i、 e我能做些什么,例如:

for a, d in output:
   ...
(注意,我想跳过元组中的第二个和第三个值) 这是可能的还是我必须使用用户索引


显然,在django模板中它略有不同,但要点是相同的。

您不能有选择地从元组中解包。表示在Python中不使用某些值的常规方法是使用下划线
\uuu

for a, _, _, d in output:
    ...
或者,使用以下索引:

for t in output:
    a, b = t[0], t[-1]
    ...

您仍然需要解包,但可以忽略它们:

for a, _, _, d in output:
    # Do things with a and d
如果您使用的是Python 3,也可以使用
*

for a, *_, d in output:
    # same deal - _ is now a list of all the values between `0 and len(row) - 1`

Python3的优点是,一行的长度可以更改(低至2个元素),您仍然可以获得正确的值,而在Python2中,如果一行输出不是4个条目,则该行将中断。

这不一定是推荐的方法,但我认为,展示numpy奇特的切片功能是有价值的:

import numpy as np
output = np.array(output, dtype='object')
for a,d in output[:, [0,3]]:
   print('a=%s, d=%s' % (a, d))

很好。在效率方面有什么不同吗?我的意思是,不解包所有的值是否更有效?