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

2024-05-14 15:59:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python2.7,希望为Abaqus odb做一些后处理

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

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

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

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

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

有没有办法用Python2.7实现这一点

提前谢谢你


Tags: 代码时间后处理元组x1x2tupley1
2条回答

使用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理解(如果您没有超过1ywant):

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')

相关问题 更多 >

    热门问题