Есть ли способ найти первое значение x для соответствующего y в кортеже / списке? - PullRequest
1 голос
/ 04 марта 2020

Я работаю с python 2.7 и хочу выполнить некоторую постобработку для Abaqus odb.

У меня есть кортеж, который выглядит следующим образом:

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

И я хочу найти первый соответствующий x, xfind, заданному значению y, ywant. Я пытался работать с '.index (ywant)' с целью, чтобы он возвращал xfind, но это не очень помогло, так как мне тоже нужен xfind ...

Но, возможно, лучше быть более конкретным c, поскольку это может быть решено также некоторыми логическими действиями (..?): Значения x кортежей являются временными шагами, а значения y равны либо 1.0, либо 0.0. Я хотел бы go через все значения y, пока значение не изменится с 1,0 до 0,0, а затем найти соответствующее время и использовать xfind и ywant в следующем коде.

Это не проблема для дальнейшего кода перенести кортеж в список.

Есть ли способ сделать это с помощью python 2.7?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 марта 2020

для получения 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']

output :

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

также вы можете использовать встроенную функцию далее :

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

вывод:

(2, 'xfind')
0 голосов
/ 04 марта 2020

Есть хороший способ использования 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
...