2014-12-11 2 views
1

У меня есть матрица около 3000 видов, например.Создание уникального списка (python)

Членистоногого/Шестиногий/Insecta/Жесткокрылый/Cerambycidae/Anaglyptus

каждая строка представляет собой последовательность таксономических классификаций. Что мне нужно сделать, сортируйте 3000 строк, чтобы каждый из них был уникальным, чтобы файл можно было загружать в программу, которая создает филогенетические (эволюционные) деревья.

Я попытался использовать набор, но получить сообщение об ошибке, поскольку списки не являются объектами хеширования, однако важно сохранить каждую строку вместе, поскольку значения в каждом столбце для каждой строки вложены.

Каков наилучший способ гарантировать, что у меня есть только уникальные значения в последнем столбце, но сохранить целостность каждой строки?

большое спасибо

+2

вы можете отобразить все списки кортежей рекурсивны, а затем использовать 'set' на внешнем? –

+0

@AdamSmith Но разве это не потеряет порядок? –

+1

Не таксономия очень хорошо подходит для вложенных словарей? Это было бы решением, которое я бы посмотрел на – CoryKramer

ответ

0

Как уже упоминалось в комментариях, кортежи hashable, даже если списки не являются. Итак, давайте преобразуем ваши строки в кортежи!

# Create the Dataset 
L = [] 
L.append(["Arthropoda", "Hexapoda", "Insecta", "Coleoptera", "Cerambycidae", "Anaglyptus"]) 
L.append(["Arthropoda", "Hexapoda", "Insecta", "Coleoptera", "Cerambycidae", "Aromia"]) 

# Instead of a list of lists, let's have a list of tuples! 
L = [tuple(x) for x in L] 

# Using a set, we can easily remove duplicates 
L = set(L) 
+0

Спасибо, Билл, очень полезно !! –

0

питона мастеров может быть оскорблен, но этот ответ стоит попробовать

l = [] 
with open('file.txt', 'r') as fp: 
    for i in fp.readlines(): 
     if i not in l: 
      l.append(i) 

with open('file2.txt', 'w') as fp: 
    fp.writelines(l) 
+1

Или следуйте http://stackoverflow.com/questions/1653970/does-python-have-an-ordered-set, используйте упорядоченный набор – kdopen

+0

@kdopen Да, но это довольно просто и легко для учащихся –

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