You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取元素被更长子列表完全包含的短子列表索引?

解决嵌套列表中找被更长子列表包含的短子列表索引问题

我来帮你搞定这个需求!咱们的目标是找出所有满足「自身所有元素都被某个更长的子列表完全包含」的子列表的索引,对吧?

思路拆解

核心逻辑其实很直接:

  • 逐个检查每个子列表,判断是否存在另一个子列表,同时满足两个条件:
    1. 这个子列表的长度比当前子列表(确保是“更长”的)
    2. 当前子列表的所有元素都能在那个更长的子列表里找到
  • 如果满足,就把当前子列表的索引加入结果集合

Python代码实现

话不多说,直接上可运行的代码:

def find_contained_sublists_indices(nested_list):
    result = []
    # 遍历每个子列表,记录索引和内容
    for idx, sublist in enumerate(nested_list):
        sublist_len = len(sublist)
        # 标记当前子列表是否被某个更长的列表包含
        is_contained = False
        # 遍历其他所有子列表进行检查
        for other_sublist in nested_list:
            other_len = len(other_sublist)
            # 首先确保另一个列表更长,然后检查当前子列表的所有元素都在其中
            if other_len > sublist_len and all(item in other_sublist for item in sublist):
                is_contained = True
                break  # 找到一个符合条件的就不用继续找了
        if is_contained:
            result.append(idx)
    return result

# 测试你的示例输入
input_list = [['spam', 'eggs'], ['spam', 'eggs', '111'], ['spam', 'eggs', 'foo'], ['spam', 'eggs', '111', 'bar'], ['spam', 'eggs', 'foo', 'bar']]
print(find_contained_sublists_indices(input_list))  # 输出: [0, 1, 2]

代码解释

  • enumerate遍历嵌套列表,同时获取子列表的索引和内容
  • 对于每个子列表,我们遍历所有其他子列表,先判断长度是否更长,再用all(item in other_sublist)检查所有元素是否都被包含
  • 一旦找到符合条件的更长子列表,就标记当前子列表为“被包含”,并跳出内层循环
  • 最后收集所有符合条件的索引返回

验证示例

针对你的输入:

  • 索引0的['spam', 'eggs']被索引1、2、3、4的子列表都包含,符合条件
  • 索引1的['spam', 'eggs', '111']被索引3的子列表包含,符合条件
  • 索引2的['spam', 'eggs', 'foo']被索引4的子列表包含,符合条件
  • 索引3和4的子列表没有更长的列表能包含它们,所以不加入结果

最终输出正好是[0,1,2],完美符合你的预期!

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

火山引擎 最新活动