Guest User

Untitled

a guest
Aug 16th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. Removing duplicate elements from a Python list containing unhashable elements while preserving order?
  2. [
  3. [('A', '1'), ('B', '2')],
  4. [('A', '1'), ('B', '2')],
  5. [('A', '4'), ('C', '5')]
  6. ]
  7.  
  8. [
  9. [('A', '1'), ('B', '2')],
  10. [('A', '4'), ('C', '5')]
  11. ]
  12.  
  13. sample = []
  14. sample.append([('A', '1'), ('B', '2')])
  15. sample.append([('A', '1'), ('B', '2')])
  16. sample.append([('A', '4'), ('C', '5')])
  17.  
  18. from operator import itemgetter
  19. from itertools import groupby, imap
  20.  
  21. def unique_justseen(iterable, key=None):
  22. "List unique elements, preserving order. Remember only the element just seen."
  23. # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
  24. # unique_justseen('ABBCcAD', str.lower) --> A B C A D
  25. return imap(next, imap(itemgetter(1), groupby(iterable, key)))
  26.  
  27. from bisect import bisect_left, insort
  28.  
  29. def dedup(seq):
  30. 'Remove duplicates. Preserve order first seen. Assume orderable, but not hashable elements'
  31. result = []
  32. seen = []
  33. for x in seq:
  34. i = bisect_left(seen, x)
  35. if i == len(seen) or seen[i] != x:
  36. seen.insert(i, x)
  37. result.append(x)
  38. return result
  39.  
  40. def unique(a):
  41. indices = sorted(range(len(a)), key=a.__getitem__)
  42. indices = set(next(it) for k, it in
  43. itertools.groupby(indices, key=a.__getitem__))
  44. return [x for i, x in enumerate(a) if i in indices]
  45.  
  46. >>> a = ['F', 'J', 'B', 'F', 'V', 'A', 'E', 'U', 'B', 'U', 'Z', 'K']
  47. >>> unique(a)
  48. ['F', 'J', 'B', 'V', 'A', 'E', 'U', 'Z', 'K']
  49.  
  50. seen = set()
  51. output = []
  52. for e in yourlist:
  53. t = tuple(e)
  54. if t in seen:
  55. continue
  56. else:
  57. seen.add(t)
  58. output.append(e)
  59.  
  60. # return output
Add Comment
Please, Sign In to add comment