I am curious what would be an efficient way of uniquefying such data objects:
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH'] ]
For each data pair, left numeric string PLUS the type at the right tells the uniqueness of a data element. The return value should be a list of lists as same as the testdata, but with only the unique values kept.
Using Python's import numpy, the unique elements in the array are also obtained. In the first step convert the list to x=numpy. array(list) and then use numpy. unique(x) function to get the unique values from the list.
Basically, you concatenate each element of your list into a single string using a list comprehension, so that you have a list of single strings. This is then much easier to turn into a set, which makes it unique. Then you simply split it on the other end and convert it back to your original list.
A list in python can contain elements all of which may or may not be unique. But for a scenario when we need unique elements like marking the attendance for different roll numbers of a class.
You can use a set:
unique_data = [list(x) for x in set(tuple(x) for x in testdata)]
You can also see this page which benchmarks a variety of methods that either preserve or don't preserve order.
I tried @Mark's answer and got an error. Converting the list and each elements into a tuple made it work. Not sure if this the best way though.
list(map(list, set(map(lambda i: tuple(i), testdata))))
Of course the same thing can be expressed using a list comprehension instead.
[list(i) for i in set(tuple(i) for i in testdata)]
I am using Python 2.6.2.
Update
@Mark has since changed his answer. His current answer uses tuples and will work. So will mine :)
Update 2
Thanks to @Mark. I have changed my answer to return a list of lists rather than a list of tuples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With