Xuddi shu elementni bir xil sinf misollari ro'yxatidan chiqarishning eng tezkor usuli

Bu yuqori sifatli Python savolidir:

Mening hamkasbim menga Foo sinfining lFoos ro'yxatini berdi.

class Foo(object):
  def __init__(self): 
    stuff
    ...
    self.spam = random number
    ....

Ro'yxat juda katta va men qayg'uradigan har bir narsa spam elementidir. Men ularni ro'yxatga qo'yishni istayman. Men hozir yaxshi ishlaydigan, lekin sekin harakat qilaman:

mySpams = [None] * len(lFoos)
for myFoo in range(len(lFoos)):
    mySpams[myFoo] = lFoos[myFoo].spam

Savol - bu tezkorlikni qanday qilish kerak.

0
Siz ro'yxatlarini ni arrays dan foydalanasiz. Odatda iboralar None ning ro'yxatini matritsaniyalashni va undan keyin har bir katalogga tayinlashni o'z ichiga olmaydi, buning o'rniga bo'sh ro'yxat mySpams = [] bilan boshlanadigan ro'yxatni tuzing, keyin sizning loopingizda mySpams.append () dan foydalaning. Keyinchalik, oldingi ibtidoiy uchun asosan sintaktik shakar bo'lgan ro'yxat-tushunchalarni ishlatishingiz mumkin, bu esa ba'zi cheklovlar bilan tezroq ishlashga imkon beradi.
qo'shib qo'ydi muallif juanpa.arrivillaga, manba
Siz ro'yxatlarini ni arrays dan foydalanasiz. Odatda iboralar None ning ro'yxatini matritsaniyalashni va undan keyin har bir katalogga tayinlashni o'z ichiga olmaydi, buning o'rniga bo'sh ro'yxat mySpams = [] bilan boshlanadigan ro'yxatni tuzing, keyin sizning loopingizda mySpams.append () dan foydalaning. Keyinchalik, oldingi ibtidoiy uchun asosan sintaktik shakar bo'lgan ro'yxat-tushunchalarni ishlatishingiz mumkin, bu esa ba'zi cheklovlar bilan tezroq ishlashga imkon beradi.
qo'shib qo'ydi muallif juanpa.arrivillaga, manba

6 javoblar

lFoos ro'yxatidagi har Foo ob'ektining spam xususiyatini chiqarish uchun ro'yxatni tushunish dan foydalanishingiz mumkin:

new_list = [foo_obj.spam for foo_obj in lFoos]
4
qo'shib qo'ydi

lFoos ro'yxatidagi har Foo ob'ektining spam xususiyatini chiqarish uchun ro'yxatni tushunish dan foydalanishingiz mumkin:

new_list = [foo_obj.spam for foo_obj in lFoos]
4
qo'shib qo'ydi

Quyidagilardan qanchalik tezroq bo'lishingiz mumkinligiga ishonchingiz komil emas:

[foo.spam for foo in lFoos]
2
qo'shib qo'ydi

Quyidagilardan qanchalik tezroq bo'lishingiz mumkinligiga ishonchingiz komil emas:

[foo.spam for foo in lFoos]
2
qo'shib qo'ydi
class Foo():
    def __init__(self, val):
         self.val = val
lFoo = [Foo(i) for i in range(1000)]
%timeit [f.val for f in lFoo]

10000 loops, best of 3: 52.5 µs per loop

%timeit list(map(lambda f: f.val, lFoo))

10000 loops, best of 3: 114 μs per loop
1
qo'shib qo'ydi
Bu aqldan ozgan. Lambda bilan juda ko'p yutuqlarga erisha olmasligingizni bilmasdim.
qo'shib qo'ydi muallif Wilmer E. Henao, manba
Lambdalar, xaritalar, kataklar va boshqalar bilan ko'p narsalarni qilishingiz mumkin. Biroq, umuman olganda, ularni tushunish bilan tezroq bajarish mumkin. Lambdaning qo'shimcha funktsiya chaqiruvi pythonda katta jazo. Bundan tashqari Guido van Rossum (python muallifi) python bu funktsional tushunchalarni
qo'shib qo'ydi muallif Giannis Spiliopoulos, manba
class Foo():
    def __init__(self, val):
         self.val = val
lFoo = [Foo(i) for i in range(1000)]
%timeit [f.val for f in lFoo]

10000 loops, best of 3: 52.5 µs per loop

%timeit list(map(lambda f: f.val, lFoo))

10000 loops, best of 3: 114 μs per loop
1
qo'shib qo'ydi
Bu aqldan ozgan. Lambda bilan juda ko'p yutuqlarga erisha olmasligingizni bilmasdim.
qo'shib qo'ydi muallif Wilmer E. Henao, manba
Lambdalar, xaritalar, kataklar va boshqalar bilan ko'p narsalarni qilishingiz mumkin. Biroq, umuman olganda, ularni tushunish bilan tezroq bajarish mumkin. Lambdaning qo'shimcha funktsiya chaqiruvi pythonda katta jazo. Bundan tashqari Guido van Rossum (python muallifi) python bu funktsional tushunchalarni
qo'shib qo'ydi muallif Giannis Spiliopoulos, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming