在两个时间字符串列表中匹配前4字符相同元素并获取索引
我来帮你修正这个问题~你的需求是找到两个列表中前4个字符相同的时间元素对,并返回它们各自的索引,原来的代码有几个小问题需要调整:
原代码的问题分析
- 判断逻辑错误:你写的
pair1[:4] in pair2是检查L1元素的前4个字符是否包含在L2元素中,但我们需要的是两者的前4个字符完全相等,应该改成pair1[:4] == pair2[:4]。 - 索引获取不可靠:使用
L1.index(pair1)会有隐患——如果L1中存在重复的时间字符串,index()只会返回第一个匹配项的索引,而非当前循环到的元素的真实位置。 - 未获取L2的索引:原代码只输出了L1的索引,没有配对返回L2对应的索引。
修正后的基础版本代码
用enumerate()遍历列表可以同时拿到元素和它的索引,这是处理这类问题更稳妥的方式:
L1 = ['12:55:35.87', '12:55:35.70', '13:00:01.10'] L2 = ['12:55:35.53', '12:55:35.30', '13:01:00.20'] # 存储符合条件的索引对 matching_pairs = [] for idx1, time1 in enumerate(L1): prefix1 = time1[:4] for idx2, time2 in enumerate(L2): prefix2 = time2[:4] if prefix1 == prefix2: matching_pairs.append( (idx1, idx2) ) # 输出结果 for pair in matching_pairs: print(f"L1索引: {pair[0]}, L2索引: {pair[1]}")
性能优化版本(适合大列表)
如果你的列表元素数量很多,两层循环的效率会比较低,可以先把L2的前缀和索引做映射,再遍历L1匹配:
from collections import defaultdict L1 = ['12:55:35.87', '12:55:35.70', '13:00:01.10'] L2 = ['12:55:35.53', '12:55:35.30', '13:01:00.20'] # 先构建L2前缀到索引的映射 prefix_to_indices = defaultdict(list) for idx2, time2 in enumerate(L2): prefix = time2[:4] prefix_to_indices[prefix].append(idx2) # 遍历L1快速匹配对应索引 matching_pairs = [] for idx1, time1 in enumerate(L1): prefix = time1[:4] if prefix in prefix_to_indices: for idx2 in prefix_to_indices[prefix]: matching_pairs.append( (idx1, idx2) ) for pair in matching_pairs: print(f"L1索引: {pair[0]}, L2索引: {pair[1]}")
这个优化版本的时间复杂度从O(n*m)降到了O(n+m),处理大列表时效率会提升很多。
内容的提问来源于stack exchange,提问作者PIEAGE
相关产品推荐
相关产品推荐

