Well, a set hashes the elements internally, and so will never be able to maintain the order. If your elements within list are guaranteed to be unique, i.e., they appear only once, you can use the set to filter the elements required:
In [26]: list1 = [(1,1),(1,2),(1,3),(3,4),(5,4),(4,7)]
...: list2 = [(1,1),(1,2)]
...: unique = set(list1) - set(list2)
...: list1 = [x for x in list1 if x in unique]
...: print (list1)
...:
[(1, 3), (3, 4), (5, 4), (4, 7)]
In case the same element can be present multiple times within the lists, and you need to keep track of unique number of distinct elements, you will need to maintain a count as well now. Due to which, the logic would look something like:
In [29]: list1=[(1,1),(1,1),(1,2),(1,3),(3,4),(5,4),(4,7)]
...: list2=[(1,1),(1,2)]
...:
...: from collections import Counter
...:
...: count = Counter(list1)
...: for element in list2:
...: if element in count:
...: count[element] -= 1
...:
...: result = []
...: for element in list1:
...: if count.get(element, 0) > 0:
...: count[element] -= 1
...: result.append(element)
...:
...: print (result)
...:
[(1, 1), (1, 3), (3, 4), (5, 4), (4, 7)]