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

Python中识别不同子列表的首次与末次出现位置问题

问题:识别列表中不同子列表的首次和末次出现位置

我有一个包含多个子列表的列表J1,需要识别所有不同的子列表及其首次和末次出现的位置。以下是我的实现代码、当前输出以及期望输出:

原代码

J1 = [[0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

distinct_sublists = []
sublist_indices = {} 
for i, sublist in enumerate(J1):
 if sublist not in distinct_sublists:
     distinct_sublists.append(sublist)
     sublist_indices[tuple(sublist)] = [i, i]
else:
    sublist_indices[tuple(sublist)][1] = i

num_distinct_sublists = len(distinct_sublists)

first_last_locations = [[indices[0], indices[1]] for indices in sublist_indices.values()]

print("Number of distinct sublists in J1:", num_distinct_sublists)
print("First and last locations of distinct sublists in J1:", first_last_locations)
print("Distinct sublists", distinct_sublists)

当前输出

Number of distinct sublists in J1: 3
First and last locations of distinct sublists in J1: [[0, 0], [3, 3], [5, 5]]
Distinct sublists [[0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

期望输出

Number of distinct sublists in J1: 3
First and last locations of distinct sublists in J1: [[0, 2], [3, 4], [5, 5]]
Distinct sublists [[0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

错误原因

代码缩进错误:else块的缩进与for循环对齐,导致它属于for循环的else分支(仅在循环正常结束时执行一次),而非if判断的else分支(应该在子列表已存在时执行)。这就使得重复子列表出现时,无法更新对应的末次位置。

修正后的代码

只需调整else的缩进,使其与if对齐:

J1 = [[0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

distinct_sublists = []
sublist_indices = {} 
for i, sublist in enumerate(J1):
    if sublist not in distinct_sublists:
        distinct_sublists.append(sublist)
        sublist_indices[tuple(sublist)] = [i, i]
    else:
        sublist_indices[tuple(sublist)][1] = i

num_distinct_sublists = len(distinct_sublists)

first_last_locations = [[indices[0], indices[1]] for indices in sublist_indices.values()]

print("Number of distinct sublists in J1:", num_distinct_sublists)
print("First and last locations of distinct sublists in J1:", first_last_locations)
print("Distinct sublists", distinct_sublists)

修正后输出

Number of distinct sublists in J1: 3
First and last locations of distinct sublists in J1: [[0, 2], [3, 4], [5, 5]]
Distinct sublists [[0, 3, 7, 9, 10], [0, 0, 7, 9, 10], [0, 0, 0, 9, 10]]

内容的提问来源于stack exchange,提问作者aamirmodi123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:50