2013-12-11 3 views
3
a = ('one', 'two') 
b = ('ten', 'ten') 

z = [('four', 'five', 'six'), ('one', 'two', 'twenty')] 

Я пытаюсь 1) видеть, если первые два элемента в моих кортежах (например, a, или b) совпадают с первыми двумя элементами в моем списке кортежей (z). 2) если есть совпадение, я хочу вернуть третий элемент кортежаPython - Соответствие

поэтому я хочу, чтобы получить

myFunc(a,z) -> 'twenty' 
myFunc(b,z) -> None 
+0

Что вы хотите иметь, когда сопоставляется более одного элемента? – BartoszKP

+0

Ну, я пытаюсь сопоставить a, b или что-то еще с таблицей, которую загружаю из базы данных. Все записи в БД должны быть уникальными, поэтому должно быть только одно совпадение. Я думаю, что могу безопасно захватить найденное первое совпадение и немедленно остановить поиск, чтобы программа работала быстрее. – appleLover

+2

Хорошо. Тогда ответ фалсетру кажется лучше. – BartoszKP

ответ

5

Используя выражение генератора и next:

>>> a = ('one', 'two') 
>>> b = ('ten', 'ten') 
>>> z = [('four', 'five', 'six'), ('one', 'two', 'twenty')] 
>>> next((x[2] for x in z if x[:2] == a), None) 
'twenty' 
>>> next((x[2] for x in z if x[:2] == b), None) 
>>> 
+1

, как в вашей реализации next() он, кажется, перебирает весь генератор, но, основываясь на примере здесь, http://stackoverflow.com/questions/1733004/python-next-function, используя следующие() просто процессы Один элемент в выражении генератора? – appleLover

+1

@appleLover, Генератор дает только в том случае, если элемент соответствует. И 'next' извлекает один элемент из этого генератора. – falsetru

+1

@BartoszKP, 'next' применяется к генератору. Генератор не завернут внутри последовательности. Это первый аргумент функции 'next'. – falsetru

3

решения Простейшего Кажется, что:

def myFunc(t, tList): 
    return [r[-1] for r in tList if r[:2] == t] or None 
+1

А, я вижу из комментариев, что это было непонятно. –

Смежные вопросы