如何根据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]]
你尝试了什么,遇到了什么问题?你尝试了什么,遇到了什么问题?