python 解压元组列表
我在用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个条目,程序就会出错。