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
相关产品推荐
相关产品推荐

