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

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]

逻辑说明

  1. 使用enumerate(X)同时获取子列表的索引和内容,无需手动遍历索引再取值。
  2. 先将子列表中的单元素列表转换成普通数值列表,避免直接比较列表对象导致的错误。
  3. 通过min(values) != max(values)判断子列表是否包含不同元素:若最小值和最大值不同,说明存在至少两个不同的元素。
  4. 收集所有符合条件的索引,最终得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:31:51