有没有办法在元组/列表中找到 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')
我正在使用 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')