Frage

Ich habe den folgenden Code, den ich eine verschachtelte Liste in Python zur Karte verwenden, um eine Liste mit der gleichen Struktur zu erzeugen.

>>> nested_list = [['Hello', 'World'], ['Goodbye', 'World']]
>>> [map(str.upper, x) for x in nested_list]
[['HELLO', 'WORLD'], ['GOODBYE', 'WORLD']]

Kann man das mit Liste Verständnis allein durchgeführt werden (ohne die Karte Funktion)?

War es hilfreich?

Lösung

Für verschachtelte Listen können Sie verschachtelte Liste Comprehensions verwenden:

nested_list = [[s.upper() for s in xs] for xs in nested_list]

Persönlich finde ich map in dieser Situation sauberer zu sein, obwohl ich fast immer Listenkomprehensionen bevorzugen. Es ist also wirklich auf Ihren Anruf, da entweder funktioniert.

Andere Tipps

Denken Sie daran, das Zen von Python:

  

Es ist in der Regel mehr als ein - und wahrscheinlich mehrere - offensichtliche Möglichkeiten, es zu tun **

.

. ** Hinweis: Herausgegeben für Genauigkeit

Wie auch immer, ich ziehe Karte.

from functools import partial
nested_list = map( partial(map, str.upper), nested_list )

Karte ist sicherlich ein viel sauberer Weg zu tun, was Sie wollen. Sie nisten können die Listenkomprehensionen aber vielleicht ist das, was Sie nach?

[[ix.upper() for ix in x] for x in nested_list]

Hier Lösung für verschachtelte Liste, die beliebige Tiefe :

def map_nlist(nlist=nlist,fun=lambda x: x*2):
    new_list=[]
    for i in range(len(nlist)):
        if isinstance(nlist[i],list):
            new_list += [map_nlist(nlist[i],fun)]
        else:
            new_list += [fun(nlist[i])]
    return new_list

Sie wollen oberen Fall alles, was Sie Listenelement, geben Sie einfach

In [26]: nested_list = [['Hello', 'World'], ['Goodbye', [['World']]]]
In [27]: map_nlist(nested_list,fun=str.upper)
Out[27]: [['HELLO', 'WORLD'], ['GOODBYE', [['WORLD']]]]

Und noch wichtiger ist, diese rekursive Funktion kann mehr als das!

Ich bin neu in Python, fühlen Sie sich frei zu diskutieren!

Andere Plakate haben die Antwort gegeben, aber wenn ich Probleme, bin Einwickeln meinen Kopf um ein funktionelles Konstrukt, ich schlucke meinen Stolz und es buchstabieren Langschrift mit explizit nicht optimalen Methoden und / oder Objekte. Sie sagten, Sie mit einem Generator, so enden wollen:

for xs in n_l:
    def doUpper(l):
        for x in l:
            yield x.upper()
    yield doUpper(xs)

for xs in n_l:
    yield (x.upper() for x in xs)

((x.upper() for x in xs) for xs in n_l)

Manchmal sauberer es ist eine der Langschrift Versionen zu halten. Für mich, Karte und reduziert manchmal macht es offensichtlich, aber Python Idiome könnten für andere offensichtliche sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top