650 Stimmen

Eine Liste in Python 3.x mit map() zurückgeben

Ich versuche, eine Liste in Hexadezimalzahlen abzubilden und dann die Liste an anderer Stelle zu verwenden. In Python 2.6, war dies einfach:

A: Python 2.6:

>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']

In Python 3.1 wird jedoch ein map-Objekt zurückgegeben.

B: Python 3.1:

>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>

Wie kann ich die zugeordnete Liste abrufen (wie in A oben) auf Python 3.x?

Oder gibt es eine bessere Möglichkeit, dies zu tun? Mein anfängliches Listenobjekt hat etwa 45 Einträge und ich möchte sie in Hex umwandeln.

3voto

Ini Punkte 401
list(map(chr, [66, 53, 0, 94]))

map(func, *iterables) --> map Objekt Erzeugt einen Iterator, der die Funktion mit Argumenten aus jeder der Iterablen berechnet. Hält an, wenn die kürzeste Iterabel erschöpft ist.

"Einen Iterator erstellen"

bedeutet, dass es einen Iterator zurückgibt.

"die die Funktion unter Verwendung der Argumente aus jeder der Iterablen berechnet"

bedeutet, dass die next()-Funktion des Iterators einen Wert jeder Iterablen nimmt und jeden von ihnen an einen Positionsparameter der Funktion übergibt.

Sie erhalten also einen Iterator von der map()-Funktion und übergeben ihn einfach an die eingebaute list()-Funktion oder verwenden List Comprehensions.

1voto

darshan k s Punkte 17

Mit List Comprehension in Python und einer einfachen Map-Funktion kann man dies auch tun:

chi = [x for x in map(chr,[66,53,0,94])]

1voto

Akshay Satpaise Punkte 17

Sie können versuchen, eine Liste aus dem Map-Objekt zu erhalten, indem Sie einfach jedes Element im Objekt iterieren und in einer anderen Variablen speichern.

a = map(chr, [66, 53, 0, 94])
b = [item for item in a]
print(b)
>>>['B', '5', '\x00', '^']

1voto

Anton K Punkte 4472

Eine weitere Möglichkeit besteht darin, eine Verknüpfung zu erstellen, die eine Liste zurückgibt:

from functools import reduce
_compose = lambda f, g: lambda *args: f(g(*args))
lmap = reduce(_compose, (list, map))

>>> lmap(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']

1voto

Devil Punkte 401

Der beste Weg, dies in pyton3.X zu tun

Sie können dies einfach in einer einzigen Zeile tun

#Devil
input_list = [66, 53, 0, 94]
out = [chr(x) for x in input_list]
print(out)

# you will get the desire output in out list
# ['B', '5', '\x00', '^']

#------------------------------
#To retrieve your list use 'ord'

original_list = [ord(x) for x in out]
print(original_list )
#[66, 53, 0, 94]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X