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

  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • Justin Davis

    Justin Davis

    14 Ocak 2008