检查元组在某个位置的元素 - 快捷方式



我试图在列表中找到元组,并在第二个位置带有某个符号。该列表如下所示:

list = [ (0, "a", 1), (1, "b", 2), (2, "c", 3)]

我显然可以通过运行以下代码找到所有带有"c"的元组:

for item in list:
    if item[1] == "c":
        return item

只是想知道我是否可以将上面给定代码的第 1 行和第 2 行结合起来做类似的事情

for (numb1, symbol=="c", numb2) in list:
    return (numb1, symbol, numb2)

有谁知道这是否有捷径?

谢谢!

您可以将filter与快速lambda一起使用。

def get_cs(ts):
    return filter(lambda t: t[1] == 'c', ts)

或者,由于您似乎只返回找到的第一个值:

def get_cs(ts):
    return next(filter(lambda t: t[1] == 'c', ts), None)
l = [item for item in list if item[1]=="c"]

您可以使用列表推导:

input = [(0, "a", 1), (1, "b", 2), (2, "c", 3)]
output = [item for item in input if item[1] == "c"]

我建议您不要使用 list 作为变量名,因为它会覆盖list()函数

编辑:我刚刚读到列表理解不是一种选择,所以@adam史密斯的答案会这样做。性能方面,列表推导是作为地图过滤器函数实现的。此外,恕我直言,它们比过滤器功能更具可读性。

试试这个:

print [a for a in alist if a[1]=='c']

输出:

[(2, 'c', 3)]

由于列表推导似乎不是一种选择,并且您似乎只对第一个匹配的元组感兴趣,那么生成器表达式怎么样:

next(t for t in ts if t[1] == 'c', None)

最新更新