Python作业:如何将letter_positions函数的列表值转为集合?
解决方法:将字典值从列表改为集合
你的代码逻辑没问题,只是存储结构用了列表而非集合,两种简单修改方式就能满足需求:
方式1:直接用集合存储(推荐)
初始化字母对应的容器时直接用集合,用add()方法添加位置(集合没有append()方法),一步到位符合要求:
def letter_positions(n): answer = {} n = n.lower() x = 0 for letter in n: if letter.isalpha(): if letter not in answer: answer[letter] = set() # 初始化集合而非列表 answer[letter].add(x) # 用add()添加元素到集合 x += 1 return answer
调用后positions['e']会直接返回你需要的集合格式{4, 5, 8, 14, 16, 43, 67, 83, 88, 89, 97, 121, 122, 141, 142}。
方式2:将现有列表转为集合(快速修改现有代码)
如果不想改动循环内的逻辑,可在函数返回前把字典里的所有列表批量转成集合:
def letter_positions(n): answer = {} n = n.lower() x = 0 for letter in n: if letter.isalpha(): if letter not in answer: answer[letter] = [] answer[letter].append(x) x += 1 # 用字典推导式把所有列表转为集合 return {k: set(v) for k, v in answer.items()}
两种方法都能达到作业要求,第一种更高效,无需额外转换步骤;第二种适合快速调整现有代码。你的核心实现逻辑没有错误,只是存储结构不符合要求而已。
内容的提问来源于stack exchange,提问作者Techtix
相关产品推荐
相关产品推荐

