Python中如何打印包含不同元素的子列表的索引
获取包含不同元素的子列表索引
问题描述
我有一个嵌套列表X,想要提取其中包含不同元素的子列表对应的索引。例如X[0]包含部分不同元素,X[1]所有元素均相同,X[2]再次包含不同元素,预期输出为i=[0,2]。
原尝试代码如下:
X=[[[46.36363636363636], [35.90909090909091], [31.363636363636367], [25.454545454545453], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547]], [[46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636]], [[46.36363636363636], [39.09090909090909], [37.27272727272727], [35.0], [33.18181818181819], [32.72727272727273], [32.27272727272727], [32.27272727272727], [32.27272727272727], [32.27272727272727]]] for i in range(0,len(X)): X = [x for x in X if min(x) != max(x)]
原代码问题
这段代码逻辑完全错误:
- 直接修改原列表
X,最后得到的是过滤后的子列表内容,而非目标索引。 - 循环遍历索引的操作毫无意义,列表推导式会一次性过滤所有元素,多次循环执行会重复过滤,导致结果完全偏离预期。
正确实现
代码示例
X=[[[46.36363636363636], [35.90909090909091], [31.363636363636367], [25.454545454545453], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547], [24.545454545454547]], [[46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636], [46.36363636363636]], [[46.36363636363636], [39.09090909090909], [37.27272727272727], [35.0], [33.18181818181819], [32.72727272727273], [32.27272727272727], [32.27272727272727], [32.27272727272727], [32.27272727272727]]] result_indices = [] for idx, sublist in enumerate(X): # 提取子列表中的数值(每个元素是单元素列表) values = [item[0] for item in sublist] # 判断是否存在不同元素:最小值≠最大值则说明有差异 if min(values) != max(values): result_indices.append(idx) print(result_indices) # 输出: [0, 2]
逻辑说明
- 使用
enumerate(X)同时获取子列表的索引和内容,无需手动遍历索引再取值。 - 先将子列表中的单元素列表转换成普通数值列表,避免直接比较列表对象导致的错误。
- 通过
min(values) != max(values)判断子列表是否包含不同元素:若最小值和最大值不同,说明存在至少两个不同的元素。 - 收集所有符合条件的索引,最终得到预期结果。
内容的提问来源于stack exchange,提问作者user20032724
相关产品推荐
相关产品推荐

