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

  • CasinoRoyaleMovie's channel

    CasinoRoyale

    1 AĞUSTOS 2006
  • HBO

    HBO

    17 Mayıs 2006
  • Moto Journal

    Moto Journal

    28 Mayıs 2007