SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • Hey Nadine

    Hey Nadine

    24 Kasım 2006
  • maxman.tv

    maxman.tv

    29 EKİM 2013