我有一个嵌套元组,它基本上是一个二维表(从 MySQL 查询返回)。我可以使用切片来获取表的一个“列”的列表或元组吗?
例如:
t = ((1,2,3),(3,4,5),(1,4,5),(9,8,7))
x = 6
如何有效地检查是否x
出现在任何元组的第三个位置?
我能找到的所有切片示例都只能在单个元组中操作。我不想从 t 中切出“行”。我想以另一种方式切割它——垂直。
您最好的选择是使用带有any()
函数的生成器表达式:
if any(row[2] == x for row in t):
# x appears in the third row of at least one tuple, do something
至于使用切片来获得一列,这里有几个选项:
使用zip()
:
>>> zip(*t)[2]
(3, 5, 5, 7)
使用列表推导:
>>> [row[2] for row in t]
[3, 5, 5, 7]
我会加入 numpy 解决方案
import numpy
t = ((1,2,3),(3,4,5),(1,4,5),(9,8,7))
x = 6
col_id = 2
a = numpy.array(t)
print a[a[:,col_id] == x]