2010-09-16 34 views
23

Bir tür veri nesnelerini uniquefying ait effient yolu ne olurdu merak ediyorum: Her veri çifti içinPython: listelerinin listesi için Teklik

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'] 
] 

, sol sayısal dize PLUS sağda tip benzersizliğini anlatıyor bir veri elemanı. Ve bir liste listesini test verileriyle aynı şekilde döndürür, ancak sadece tek varlıklar vardır.

unique_data = [list(x) for x in set(tuple(x) for x in testdata)] 

Ayrıca korumak veya düzeni korumak yok ya çeşitli yöntemler kriterler this page görebilirsiniz: Bir dizi kullanabilirsiniz

cevap

51

Selamlar.

+0

Siparişi bu yöntemle kaybederseniz unutmayın. İlgili ise, öğeleri elle ayırmanız veya kaldırmanız gerekecek. – Wolph

+1

Bir hata alıyorum: 'TypeError: unhashable type: 'list''. Python 2.6.2, Ubuntu Jaunty. –

+0

@Hellnar: Bir tuple kullanmak için kodu yeni güncelledi, şimdi artık bu sorunu alamayacaksınız :) – Wolph

5

@ Mark'ın yanıtını denedim ve bir hatayla karşılaştım. Listeyi ve her bir öğeyi bir tuple dönüştürmek çalışmasını sağladı. Bu olsa en iyi yolu olsa emin değilim.

list(map(list, set(map(lambda i: tuple(i), testdata)))) 

Elbette, aynı şey bunun yerine bir liste kavraması kullanılarak ifade edilebilir.

[list(i) for i in set(tuple(i) for i in testdata)] 

Python 2.6.2 kullanıyorum.

Güncelleme

@ Mark beri onun cevabını değişti. Mevcut cevabı tuples kullanıyor ve işe yarayacak. Yani olacak mayın

Güncelle @ Mark için 2

Teşekkür :). Yanıtlarımı, bir liste listesi yerine bir liste listesini döndürmek için değiştirdim.

+0

@Mark: tamamlandı. Teşekkürler! –

+0

İşte küçük bir hile: 'lambda x: foo (x) 'yerine' foo 'yazabilirsiniz. –

+0

@Mark: Nerede foo 'callable. Yakaladım. –

1
import sets 
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']] 
conacatData = [x[0] + x[1] for x in testdata] 
print conacatData 
uniqueSet = sets.Set(conacatData) 
uniqueList = [ [t[0:-3], t[-3:]] for t in uniqueSet] 
print uniqueList 
+0

Diğer cevaplar çok daha havalı! – pyfunc

+2

Ayrıca, küme modülü kullanımdan kaldırılmıştır, bunun yerine yerleşik set türünü kullanın. –