11 AĞUSTOS 2010, ÇARŞAMBA
İki liste arasındaki fark
Bu gibi: Python iki liste var
temp1 = ['One', 'Two', 'Three', 'Four']
temp2 = ['One', 'Two']
İkincisi mevcut olmayan ilk listeden öğeleri içeren üçüncü bir liste oluşturmak istiyorum. Örnek almam lazım:
temp3 = ['Three', 'Four']
Döngüleri ve kontrol etmeden herhangi bir hızlı yolu var mı?
CEVAP
11 AĞUSTOS 2010, ÇARŞAMBA
Mevcut çözümler ya da başka bir teklif
- O daha hızlı (*m n) performans.
- Giriş listesi düzeni korumak.
Ancak bugüne kadar hiçbir çözüm de vardır. Eğer ikisini de istiyorsanız, bu deneyin:
s = set(temp2)
temp3 = [x for x in temp1 if x not in s]
Performans testi
import timeit
init = 'temp1 = list(range(100)); temp2 = [i * 2 for i in range(50)]'
print timeit.timeit('list(set(temp1) - set(temp2))', init, number = 100000)
print timeit.timeit('s = set(temp2);[x for x in temp1 if x not in s]', init, number = 100000)
print timeit.timeit('[item for item in temp1 if item not in temp2]', init, number = 100000)
Sonuçlar:
4.34620224079 # ars' answer
4.2770634955 # This answer
30.7715615392 # matt b's answer
Yanı sıra koruma emri sundum yöntemi gereksiz bir set inşaatı gerektirmez, çünkü set çıkarma daha da (biraz) daha hızlıdır. Performans farkı ise karma pahalı ise eğer ilk liste ikinci çok daha uzun ve daha fazla fark olurdu. Burada ikinci bir test bu gösteri:
init = '''
temp1 = [str(i) for i in range(100000)]
temp2 = [str(i * 2) for i in range(50)]
'''
Sonuçlar:
11.3836875916 # ars' answer
3.63890368748 # this answer (3 times faster!)
37.7445402279 # matt b's answer
Bunu Paylaş:
Scala Dizi ve Liste arasındaki fark...
scala: Seq ve bir Liste arasındaki far...
Set ve Liste arasındaki fark nedir?...
'IEnumerable ve Dizi arasındaki f...
C STL kapları:'deque ve liste?ara...