如何使用map函数为字符串列表元素分配自定义索引?
用map函数实现字母的自定义索引分配问题
- 可以用map实现,但得配合一个能记录已出现字母状态的工具——因为你的需求是重复字母复用同一个索引,而map本身是对每个元素做独立处理,必须靠外部状态来记住之前分配过的索引。
- 你之前得到
<map object at ...>是正常现象:map返回的是迭代器,必须用list()转成列表才能看到结果,但如果你的处理函数没维护状态,转成列表也拿不到重复字母同索引的效果。 - 具体实现代码(用闭包维护状态):
def make_indexer(): seen_chars = {} idx = 1 def assign_idx(char): nonlocal idx if char not in seen_chars: seen_chars[char] = idx idx += 1 return (char, seen_chars[char]) return assign_idx # 测试 char_list = ['k', 'i', 's', 's', 'a'] result = list(map(make_indexer(), char_list)) print(result)
运行后会输出:[('k', 1), ('i', 2), ('s', 3), ('s', 3), ('a', 4)],完全符合需求。如果需要字典格式或者仅索引列表,可以对结果再做简单处理。
- 原理:闭包
assign_idx能持续跟踪已经处理过的字母和当前可用的索引,每次map处理一个字母时,先检查是否已经分配过索引,没分配就更新状态并返回新索引,否则直接返回已有的索引。
内容的提问来源于stack exchange,提问作者Elitragen
相关产品推荐
相关产品推荐

