python解压缩元组列表

时间:2014-06-05 17:14:42

标签: python django list tuples unpack

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

如果我有

output= [(a1,b1,c1,d1), (a2,b2,c2,d2), ...] 

所以我会这样做:

for a,b,c,d in output:
  ...

现在的问题是,有时我会选择很多列,而我不想全部打印。 我可以只解包我需要的值吗?或者我因为元组的顺序而受限制?
即我可以这样做:

for a, d in output:
   ...

(注意,我想跳过元组中的第二个和第三个值) 这是可能的还是我必须使用索引?

显然django模板略有不同,但重点是相同的。

3 个答案:

答案 0 :(得分:5)

您仍需要解压缩它们,但您可以忽略它们:

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`

Python 3的优势在于单个行的长度可以改变(低至2个元素)并且您仍然可以获得正确的值,而在Python 2中,如果一行输出是其他任何其他行,该行将会中断超过4个条目。

答案 1 :(得分:2)

您无法有选择地从元组中解压缩。表明你不会在Python中使用某些值的传统方法是使用下划线_

for a, _, _, d in output:
    ...

或者,使用索引:

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

答案 2 :(得分:0)

这不一定是推荐的方式,但我认为展示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))