在Python中按指定索引插入元素时,如何自动补全空缺为None?
问题:实现自动补全None的列表插入功能
现有空列表:
msg: list = []
期望实现如下行为:
msg.insert(2,"two") # msg = [None, None, "two"] msg.insert(10,"ten") # msg = [None, None, "two", None, None, None, None, None, None, None, "ten"]
当前实现代码:
def insert_into_list(orig_list: list, index: int, element: str)->None: # does not need to return the list if index >= len(orig_list): # sanity checks removed for MRE for _ in range(index - len(orig_list) + 1): orig_list.append(None) orig_list.insert(index, element)
请问是否存在更优、更标准或更简洁的实现方式,无需额外编写方法?
回答
有更简洁高效的实现方式,无需额外封装方法,也能替代原有的循环逻辑:
简化函数实现
用extend配合列表乘法替代循环append,底层优化过的列表操作比循环更快,代码也更简洁:
def insert_into_list(orig_list: list, index: int, element: str) -> None: # 扩展列表到目标索引的前一位,不足的补None orig_list.extend([None] * max(0, index - len(orig_list))) orig_list.insert(index, element)
无需函数的直接写法
如果不想写额外方法,每次插入时直接写两行代码即可:
# 第一次插入"two"到索引2 msg += [None] * max(0, 2 - len(msg)) msg.insert(2, "two") # 第二次插入"ten"到索引10 msg += [None] * max(0, 10 - len(msg)) msg.insert(10, "ten")
这样执行后就能得到你期望的列表状态,逻辑清晰且符合Python惯用写法。
内容的提问来源于stack exchange,提问作者kesarling
相关产品推荐
相关产品推荐

