python如何取map中的元素_获取map()以在Python 3.x中返回列表

博客围绕Python中列表映射为十六进制展开,指出Python 2.6中map函数返回列表,而Python 3.1返回map对象。并给出在Python 3.x上检索映射列表的多种方法,如列表推导式、将map对象转为列表等,还探讨了定义返回列表的函数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试将列表映射为十六进制,然后在其他地方使用该列表。 在python 2.6中,这很简单:

答: Python 2.6:

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

['B', '5', '\x00', '^']

但是,在Python 3.1中,以上代码返回一个map对象。

B: Python 3.1:

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

如何在Python 3.x上检索映射列表(如上面的A所示)?

另外,还有更好的方法吗? 我的初始列表对象大约有45个项目,并且id希望将它们转换为十六进制。

#1楼

您为什么不这样做:

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

#2楼

做这个:

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

在Python 3+中,许多迭代可迭代对象的进程本身都会返回迭代器。 在大多数情况下,这最终会节省内存,并且应该使处理速度更快。

如果您要做的只是最终遍历此列表,则无需将其转换为列表,因为您仍然可以遍历map对象,如下所示:

# Prints "ABCD"

for ch in map(chr,[65,66,67,68]):

print(ch)

#3楼

我对Python 3.1不熟悉,但是可以吗?

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

#4楼

返回列表的地图功能具有保存键入的优点,尤其是在交互式会话期间。 您可以定义返回列表的lmap函数(类似于python2的imap ):

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

然后调用lmap而不是map : lmap(str, x)比list(map(str, x))短5个字符(在这种情况下为30% list(map(str, x)) ,并且肯定比[str(v) for v in x]短[str(v) for v in x] 。 您也可以为filter创建类似的功能。

对原始问题有一条评论:

我建议重命名为Geting map()以返回Python 3. *中的列表,因为它适用于所有Python3版本。 有没有办法做到这一点? – meawoppl 1月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

#5楼

Python 3.5的新功能:

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

更新

一直在寻找更短的途径,我发现这也行得通:

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

开箱也适用于元组。 注意最后的逗号。 这使其成为1个元素的元组。 也就是说,它等效于(*map(chr, [66, 53, 0, 94]),)

它比带有方括号的版本短一个字符,但我认为最好写,因为您从星号-扩展语法开始,所以我觉得它比较软。 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值