python 解压元组列表

2 投票
3 回答
2251 浏览
提问于 2025-04-18 08:45

我在用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

这并不是推荐的做法,但我觉得展示一下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))
2

在Python中,你不能只从元组中选择性地提取某些值。通常,如果你不打算使用某些值,可以用下划线 _ 来表示:

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

另外,你也可以直接使用索引来提取值:

for t in output:
    a, b = t[0], t[-1]
    ...
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个条目,程序就会出错。

撰写回答