6

我有一个嵌套元组,它基本上是一个二维表(从 MySQL 查询返回)。我可以使用切片来获取表的一个“列”的列表或元组吗?

例如:

t = ((1,2,3),(3,4,5),(1,4,5),(9,8,7))

x = 6

如何有效地检查是否x出现在任何元组的第三个位置?

我能找到的所有切片示例都只能在单个元组中操作。我不想从 t 中切出“行”。我想以另一种方式切割它——垂直。

4

2 回答 2

12

您最好的选择是使用带有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]
    
于 2013-04-02T23:02:41.420 回答
3

我会加入 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]
于 2013-04-02T23:41:54.160 回答