如何依据含空位的列表修正另一列表的索引以对齐空位
问题
我有两个包含字符串和空位的列表:list1的空位分布在列表中间,list2的所有空位都被移到了列表末尾。请问如何将list2的索引修正为与list1一致?
示例:
list1 = ['a','','b','c','','','z','','k'] list2 = ['d','q','j','m','n','','','','']
预期输出:['d','','q','j','','','m','','n']
我尝试了谷歌上能找到的所有方法但都无效,以下是我尝试的其中一种方法:
for i, val in enumerate(list1): if val != '': index = list2.index(val) newlist2[i] = val newlist2[index] = list2[index]
解决方案
核心逻辑很简单:先把list2里的非空元素按顺序提取出来,再照着list1的空位结构,把这些元素逐个填到list1的非空位置上,空位直接留空。
实现代码:
list1 = ['a','','b','c','','','z','','k'] list2 = ['d','q','j','m','n','','','',''] # 提取list2中的非空元素,按顺序存储 non_empty = [item for item in list2 if item != ''] # 用指针跟踪当前要取用的非空元素位置 current = 0 result = [] for elem in list1: if elem != '': # list1此处非空,填入non_empty的当前元素 result.append(non_empty[current]) current += 1 else: # list1此处是空位,直接加空字符串 result.append('') print(result)
运行后输出完全符合预期:['d','','q','j','','','m','','n']
你的原有代码问题在哪?
你之前的思路是通过list2.index(val)找元素,但list1和list2的元素本身没有对应关系(比如list1的'a'和list2的'd'没关系),这个逻辑从根源上就错了。我们要匹配的是空位的位置结构,不是元素值的对应,所以不需要找元素索引,只需要按顺序填充即可。
内容的提问来源于stack exchange,提问作者Elsad Yunusov
相关产品推荐
相关产品推荐

