Pętle Pythona vs listy rozumienia vs mapa dla efektów ubocznych (tj. Nieużywanie wartości zwracanych)

TL; DR Który jest najlepszy?

1.- [r.update(r.pop('some_key')) for r in res if r.get('some_key')]

2.- map(lambda r: r.update(r.pop('some_key') if r.get('some_key') else []), res)

3.- map(lambda r: r.update(r.pop('some_key')), filter(lambda r: r.get('some_key'), res))

4.- for r in res:
        if r.get('some_key'):
            for element in r['some_key']:
                r[element] = r['some_key'][element]
            del r['some_key']

5.- Insert your own approach here

Uwaga : To nie jest kod produkcyjny. Jest to kod uruchamiany w zestawie testów, więc bardziej interesuje mnie czytelność / łatwość utrzymania niż wydajność. Niemniej jednak chciałbym również wiedzieć, czy decyzja dotycząca tego, która z nich jest lepsza (biorąc pod uwagę wydajność kompromisu / czytelność), zmieni się, jeśli będzie to kod produkcyjny. Liczba elementów „some_key” jest dość mała, jeśli to robi różnicę.

Kontekst : PrzeczytałemPython List Comprehension Vs. Mapa gdzie przyjęta odpowiedź mówi:

[...] Objaśnienia list mogą być szybsze w innych przypadkach i większość (nie wszystkie)pythonistas uważają je za bardziej bezpośrednie i jaśniejsze [...].

Niemniej jednak zaakceptowana odpowiedź naCzy Pythonic używa wyrażeń listowych tylko dla efektów ubocznych? mówi:

Tojest do tego bardzo anty-Pythoniczny [używaj list ze zrozumieniem tylko dla efektów ubocznych, ignorując wartość zwrotną], a każdy doświadczony Pythonista da ci to piekło. Lista pośrednia jest wyrzucana po jej utworzeniu i potencjalnie może być bardzo, bardzo duża, a zatem kosztowna w tworzeniu.

PS: Mam już opinię, która z nich jest najlepsza, ale jeden z moich współpracowników się nie zgadza. Dlatego pytam.

questionAnswers(2)

yourAnswerToTheQuestion