得map()を返すリストをPython3.x
-
19-09-2019 - |
質問
ようにしている地図aリストの六角レンチを使用してリストです。Python2.6、これは簡単です:
A: Python2.6:
>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']
しかし、Python3.1上記のマップを返しまオブジェクトです。
B: Python3.1:
>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>
どんな検索、マップされたリストとして A 上記Python3.x?
また、より良い方法?私が最初にリストオブジェクトには約45アイテムidのように変換する作業の六角が付いています。
解決
い:
list(map(chr,[66,53,0,94]))
Python3+は、多くのプロセスに対して繰り返し処理を実行iterables反復子を返します。ほとんどの場合、この終了につきましては、メモリー、なすべきくなります。
さすがに対して繰り返し処理を実行このリストがありません必要なものとして一覧できるので、いまだに対して繰り返し処理を実行し map
オブジェクトはこのように:
# Prints "ABCD"
for ch in map(chr,[65,66,67,68]):
print(ch)
他のヒント
なぜやっています:
[chr(x) for x in [66,53,0,94]]
その名リストを理解したりしています。でたっぷりの情報が こちらのリンクは、Python(2.6)文書リストの理解.すがい Python3documenation, れています。
新たにとっPython3.5:
[*map(chr, [66, 53, 0, 94])]
感謝 追加の開梱の一般化
更新
においては、短い方は、こちらも作品:
*map(chr, [66, 53, 0, 94]),
開梱作品の入ったタプルです。注このカンマです。このタプルの1要素です。この相当 (*map(chr, [66, 53, 0, 94]),)
この短縮による唯一のcharからのバージョンのリスト-ブラケットで思いのですが、最初の印の拡張書式に置き換わった構造なので、この柔らかく、安心です。:)
リストに戻マップ機能において最節タイピング、インタラクティブセッション一覧.を定義しておくことができま lmap
機能の類似のpython2の imap
)このリストを返します:
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
ます。
あしたへのコメントの質問:
を提供している名前の変更を地図()を返すリストをPython3.* としてこの制度の対象となる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
私は知らないPython3.1です。
[chr(x) for x in [66, 53, 0, 94]]
変換する 私の古いコメント より視認性:のための"より良いないということなく map
全ての場合には入力できASCII序数では、一般的により高速に転換 bytes
およびデコード、ラ bytes(list_of_ordinals).decode('ascii')
.取得するま str
値のものが必要な場合は、 list
のための可変性などをできるだけで変換で見ることができます。例えば、 ipython
microbenchmarks変換45入力:
>>> %%timeit -r5 ordinals = list(range(45))
... list(map(chr, ordinals))
...
3.91 µs ± 60.2 ns per loop (mean ± std. dev. of 5 runs, 100000 loops each)
>>> %%timeit -r5 ordinals = list(range(45))
... [*map(chr, ordinals)]
...
3.84 µs ± 219 ns per loop (mean ± std. dev. of 5 runs, 100000 loops each)
>>> %%timeit -r5 ordinals = list(range(45))
... [*bytes(ordinals).decode('ascii')]
...
1.43 µs ± 49.7 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)
>>> %%timeit -r5 ordinals = list(range(45))
... bytes(ordinals).decode('ascii')
...
781 ns ± 15.9 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)
場として残すために、その str
, で~20%の時間の最速の map
ソ;でも変換するリストに戻るまだまだ未満40%の最高速 map
ます。バルク変換によ bytes
や bytes.decode
そして一括変換に戻る list
保存する場合は、 が これまで述べたとおりだければすべての入力はASCII序数(または序数について、バイトのキャラクターのロケール特有のエンコードなど latin-1
).
list(map(chr, [66, 53, 0, 94]))
地図(value*iterables)-->mapオブジェクト を繰り返し処理する反復子を計算する機能を引数から それぞれのiterables.停止時の最短のlistが消耗している。
"を繰り返し処理する反復子"
だれもがこの反復子を返し.
"を計算する機能を引数からそれぞれのiterables"
このnext()関数の反復子と隣り合うところに位置している値のiterablesとパスそれぞれが一つに位置パラメータの機能です。
いたしますので、あ序で繰り返し処理する反復子からの地図()funtionとjsutでは、list()組み込み機能の使用やリストの理解.
上記の回答 Python 3
, まだ作成 list
結果の値から map
として
li = []
for x in map(chr,[66,53,0,94]):
li.append(x)
print (li)
>>>['B', '5', '\x00', '^']
して一般化によるもった、地図の操作にも応用が可能でに同様のファッションのように regex
問題まで書き出し機能の取得 list
の項目の図は結果セットでも同時に行います。Ex.
b = 'Strings: 1,072, Another String: 474 '
li = []
for x in map(int,map(int, re.findall('\d+', b))):
li.append(x)
print (li)
>>>[1, 72, 474]
用リストの理解についてはpythonの基本地図機能を使用できなもの:
chi = [x for x in map(chr,[66,53,0,94])]