有没有办法在元组/列表中找到 x 到相应 y 的第一个值?

Is there a way to find the first value of x to a corresponding y in a tuple/ list?

我正在使用 python 2.7 并想为 Abaqus odb 做一些 post 处理。

我有一个如下所示的元组:

tuple_1= ( (x1, y1), (x2, y2), (xfind, ywant), .. (xend, yend) )

并且我想找到给定值y的第一个对应的x,xfind,ywant。 我尝试使用“.index(ywant)”,目的是 returns xfind,但它并没有真正帮助,因为我也需要 xfind...

但也许最好更具体一些,因为它也可以通过一些布尔操作 (..?) 来解决: 元组的 x 值是时间步长,y 值是 1.0 或 0.0。 我想遍历所有 y 值,直到值从 1.0 切换到 0.0,然后找到相应的时间并在进一步的代码中同时使用 xfind 和 ywant。

将元组传输到列表的进一步代码不是问题。

有没有办法用 python 2.7 执行此操作?

提前致谢!

使用next有一个很好的方法:

next((x for x, y in tuple_1 if y == 'ywant'), 'not found')

代码:

tuple_1= ( ('x1', 'y1'), ('x2', 'y2'), ('xfind', 'ywant'), ('xend', 'yend') )

print(next((x for x, y in tuple_1 if y == 'ywant'), 'not found'))
# xfind

要获得 xwant 和直到 xwant 的元素数量,您可以使用 dict 理解(如果您没有超过 1 个 ywant):

tuple_1 = ( ('x1', 'y1'), ('x2', 'y2'), ('xfind', 'ywant'), ('xend', 'yend') )
{y: {'x': x, 'count': i} for i, [x, y] in enumerate(tuple_1)}['ywant']

输出:

{'x': 'xfind', 'count': 2}

此外,您可以使用内置函数next:

next(((i, x) for i, [x, y] in enumerate(tuple_1) if y == 'ywant'), 'not found')

输出:

(2, 'xfind')