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

  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014
  • SaraBeautyCorner - Nails and Nail Art Designs, DIY, Fashion & Makeup Tutorial

    SaraBeautyCo

    7 EKİM 2012