Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据python中嵌套列表中的公共元素计算子列表的数量?_Python_List_Nested_Sublist - Fatal编程技术网

如何根据python中嵌套列表中的公共元素计算子列表的数量?

如何根据python中嵌套列表中的公共元素计算子列表的数量?,python,list,nested,sublist,Python,List,Nested,Sublist,我有一个这样的列表:[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3],[3,4]。如何计算作为两个以上列表的子列表的列表?例如,这里的[2,3]和[3,4]将是前3个列表的子列表。我想摆脱他们 set_list = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7], [2, 3], [3, 4]] check_list = [[2, 3], [3, 4]] s

我有一个这样的列表:
[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3],[3,4]
。如何计算作为两个以上列表的子列表的列表?例如,这里的
[2,3]和[3,4]
将是前3个列表的子列表。我想摆脱他们

set_list = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7], [2, 3], [3, 4]]
check_list = [[2, 3], [3, 4]]
sublist_to_list = {}

for set in set_list:
    for i, sublist in enumerate(check_list):
        count = 0
        for element in sublist:
            if element in set:
                count += 1

        if count == len(sublist):
            if i not in sublist_to_list:
                sublist_to_list[i] = [set]
            else:
                sublist_to_list[i].append(set)

print(sublist_to_list)
输出:
{0:[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7],[2,3]],1:[1,2,3,4,5,5,6,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[3,4]}

  • 这意味着[2,3]是[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3]]的子集
  • [3,4]是[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[3,4]的子集
输出:
{0:[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7],[2,3]],1:[1,2,3,4,5,5,6,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[3,4]}

  • 这意味着[2,3]是[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3]]的子集
  • [3,4]是[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[3,4]的子集

    • 这种理解应该做到:

      data = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7], [2, 3], [3, 4]]
      solution = [i for i in data if sum([1 for j in data if set(i).issubset(set(j))]) < 3]
      
      data=[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3],[3,4]]
      解决方案=[i代表数据中的i,如果和([1代表数据中的j,如果集(i)。issubset(集(j))])<3]
      
      这种理解应该做到:

      data = [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7], [2, 3], [3, 4]]
      solution = [i for i in data if sum([1 for j in data if set(i).issubset(set(j))]) < 3]
      
      data=[[1,2,3,4,5,6,7,8,9],[1,2,3,4,5],[2,3,4,5,6,7],[2,3],[3,4]]
      解决方案=[i代表数据中的i,如果和([1代表数据中的j,如果集(i)。issubset(集(j))])<3]
      
      您可以首先创建一个函数,用于获取列表的子列表:

      def sublists(lst):
          length = len(lst)
      
          for size in range(1, length + 1):
              for start in range(length - size + 1):
                  yield lst[start:start+size]
      
      其工作原理如下:

      >>> list(sublists([1, 2, 3, 4, 5]))
      [[1], [2], [3], [4], [5], [1, 2], [2, 3], [3, 4], [4, 5], [1, 2, 3], [2, 3, 4], [3, 4, 5], [1, 2, 3, 4], [2, 3, 4, 5], [1, 2, 3, 4, 5]]
      
      然后,您可以使用它将所有子列表列表索引收集到一个:

      它将为子列表提供元组键,并将列表索引作为值

      然后,要确定在所有列表中出现两次以上的子列表,可以检查所有索引集的长度是否超过两次:

      print([list(k) for k, v in d.items() if len(set(v)) > 2])
      
      这将给出以下子列表:

      [[2], [3], [4], [5], [2, 3], [3, 4], [4, 5], [2, 3, 4], [3, 4, 5], [2, 3, 4, 5]]
      

      您可以首先创建一个函数,用于获取列表的子列表:

      def sublists(lst):
          length = len(lst)
      
          for size in range(1, length + 1):
              for start in range(length - size + 1):
                  yield lst[start:start+size]
      
      其工作原理如下:

      >>> list(sublists([1, 2, 3, 4, 5]))
      [[1], [2], [3], [4], [5], [1, 2], [2, 3], [3, 4], [4, 5], [1, 2, 3], [2, 3, 4], [3, 4, 5], [1, 2, 3, 4], [2, 3, 4, 5], [1, 2, 3, 4, 5]]
      
      然后,您可以使用它将所有子列表列表索引收集到一个:

      它将为子列表提供元组键,并将列表索引作为值

      然后,要确定在所有列表中出现两次以上的子列表,可以检查所有索引集的长度是否超过两次:

      print([list(k) for k, v in d.items() if len(set(v)) > 2])
      
      这将给出以下子列表:

      [[2], [3], [4], [5], [2, 3], [3, 4], [4, 5], [2, 3, 4], [3, 4, 5], [2, 3, 4, 5]]
      

      你尝试了什么,遇到了什么问题?你尝试了什么,遇到了什么问题?