Получение карты () для возврата списка в Python 3.x

Я пытаюсь отобразить список в шестнадцатеричный, а затем использовать список в другом месте. В python 2.6 это было легко:

A: Python 2.6:

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

Однако, на Python 3.1, приведенное выше возвращает объект карты.

B: Python 3.1:

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

Как получить отображаемый список (как в A выше) на Python 3.x?

Альтернативно, есть ли лучший способ сделать это? Мой первоначальный объект списка имеет около 45 элементов, а id – для преобразования их в шестнадцатеричный.

5 Solutions collect form web for “Получение карты () для возврата списка в Python 3.x”

Сделай это:

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

В Python 3+ многие процессы, которые перебирают итераторы, возвращают сами итераторы. В большинстве случаев это приводит к экономии памяти и ускоряет работу.

Если все, что вам нужно сделать, это перебрать этот список в конце концов, нет необходимости даже преобразовывать его в список, потому что вы все равно можете перебирать объект map следующим образом:

 # Prints "ABCD" for ch in map(chr,[65,66,67,68]): print(ch) 

Почему вы не делаете этого:

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

Это называется пониманием списка. Вы можете найти много информации о Google, но вот ссылка на документацию Python (2.6) на понимание списков . Тем не менее, вы можете быть заинтересованы в докюмене Python 3 .

Новый и опрятный в Python 3.5:

 [*map(chr, [66, 53, 0, 94])] 

Благодаря дополнительным распаковкам

Функция отображения списков, возвращающая карту, имеет преимущество сохранения набора текста, особенно во время интерактивных сеансов. Вы можете определить функцию lmap (по аналогии с imap python2), которая возвращает список:

 lmap = lambda func, *iterable: list(map(func, *iterable) 

Тогда вызов lmap вместо map выполнит задание: lmap(str, x) короче на 5 символов (в этом случае 30%), чем list(map(str, x)) и, конечно, короче [str(v) for v in x] . Вы можете создавать аналогичные функции и для filter .

Был комментарий к первому вопросу:

Я бы предложил переименовать Get Map (), чтобы вернуть список в Python 3. *, как это применимо ко всем версиям Python3. Есть ли способ сделать это? – meawoppl 24 января в 17:58

Это можно сделать, но это очень плохая идея. Просто для удовольствия, вот как вы можете ( но не должны ) делать это:

 __global_map = map #keep reference to the original map lmap = lambda func, *iterable: list(__global_map(func, *iterable)) # using "map" here will cause infinite recursion map = lmap x = [1, 2, 3] map(str, x) #test map = __global_map #restore the original map and don't do that again map(str, x) #iterator 

Я не знаком с Python 3.1, но будет ли это работать?

 [chr(x) for x in [66, 53, 0, 94]] 
  • Инструменты криптографии для python 3
  • Как получить доступ к переменным из разных классов в tkinter python 3
  • Незакрываемое окно с использованием tkinter
  • Довольно писать и печатать строковые элементы numpy ndarray (Python)
  • Получить имя папки в Python
  • Ошибка при создании нового текстового файла с помощью python?
  • Как сортировать 2 элементарный набор строк в смешанном порядке Используя ключевой параметр (не cmp)
  • Почему я должен добавить python в PATH
  • синтаксическая ошибка с KeyError в python 3.2
  • Принуждение потока для блокировки всех остальных потоков от выполнения
  • Когда полезен объект ()?
  • Python - лучший язык программирования в мире.