2016-08-16 2 views
-1

Вот мое назначение:Как решить эту обратную связь?

Написать функцию обратную (отн), который принимает отношение отн и возвращает обратную связь соотношения отн. Обратное отношение InvsetR отношения R определяется как InvsetR = {(x, y) ∈ S × S | (y, x) ∈ R)}. Пример:

inRelation ({(1,1), (1,2), (2,3), (4,2)}) должен возвращать

{(1,1), (2,1), (3,2), (2,4)}

Вот мой код:

def inverse(rel): 
    m=set() 
    for (x,y) in rel: 
     m.add(y,x) 
    return m 

Он говорит, что я могу добавить только один элемент. Что я могу сделать?

+0

Вы должны добавить пару '(у, х)' так: 'm.add ((у, х)) '. –

+0

вам нужно использовать 'm.add ((y, x))' –

+0

'm.add (x, y)' вызывает функцию 'add' с * двумя * параметрами' x' и 'y'. Вам нужно передать параметр * one *: tuple '(x, y)', поэтому вам нужно написать 'm.add ((x, y))'. – Heinrich

ответ

0

Для этого конкретного примера, вам не нужны никакие пользовательские функции вашей, просто использовать встроенные функции питон уже обеспечивает, пару примеров:

foo = set([(1, 1), (1, 2), (2, 3), (4, 2)]) 
inv_foo1 = map(lambda (a, b): (b, a), foo) 
inv_foo2 = {(b, a) for (a, b) in foo} 
print(foo) 
print(inv_foo1) 
print(inv_foo2) 
0

Если «отношение» представляет собой набор (х, у) пары:

>>> relation = {(1,1), (1,2), (2,3), (4,2)} 

перевернутой соотношение:

>>> inverted = {(y, x) for x, y in relation} 
>>> inverted 
{(3, 2), (1, 1), (2, 4), (2, 1)} 

inRelation может быть:

def inRelation(relation): 
    return {(y, x) for x, y in relation} 

примечание: Я предпочитаю змеиный случай: inv_relation

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