如何用字典实现向列表指定索引插入对应值?
问题解答:用字典实现LeetCode元素插入对应索引位置?
问题背景
现有两个列表:nums = [1, 5, 3]、index = [0, 1, 2],需要将nums中的元素插入到新列表对应index的位置。已用while loop解决问题,现在尝试用字典实现,写出了如下代码:
list2 = [] ans = dict(zip(nums, index)) list2.insert(someindex, somenumber)
想知道如何访问字典中的数据,替换someindex和somenumber,以及此方法是否可行。
字典数据的访问方式
你用dict(zip(nums, index))生成的字典结构是{1: 0, 5: 1, 3: 2},也就是键为nums的元素,值为对应的index。要遍历字典的键值对,可以用items()方法,代码修改如下:
list2 = [] nums = [1, 5, 3] index = [0, 1, 2] ans = dict(zip(nums, index)) # 遍历字典的键值对,num是nums元素,idx是对应index for num, idx in ans.items(): list2.insert(idx, num)
此方法的可行性分析
这种方法不可行,核心原因有两个:
- 顺序问题:Python 3.7之前的字典是无序的,遍历字典时的顺序和原nums、index的顺序可能不一致,会导致元素插入到错误的位置;即使是3.7+的有序字典,用字典存储这种对应关系也是冗余且没必要的。
- 重复元素问题:如果nums中存在重复元素,字典的键会被覆盖,丢失原始的索引信息。比如
nums = [1, 1, 3]、index = [0, 1, 2]时,生成的字典会是{1: 1, 3: 2},第一个1对应的索引0会直接丢失。
更优的实现方式
不需要借助字典,直接遍历zip(nums, index)的结果即可,既保留顺序,又能处理重复元素:
list2 = [] nums = [1, 5, 3] index = [0, 1, 2] for num, idx in zip(nums, index): list2.insert(idx, num)
内容的提问来源于stack exchange,提问作者rooknoobski
相关产品推荐
相关产品推荐

