You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在两个时间字符串列表中匹配前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:51:57