import itertools
arr = [3,4,7,9,17,28,30,31]
a=list(itertools.combinations(arr, 6))
n3 = [set(range(j,j+2)) for j in arr if j + 1 in arr]
b = [[j,k] for j in a if len(j) != min([len(set(j) - s) for s in n3]+2)
不知道哪里搞错了,上面有28组想排除 同时有 3 4 30 31这两次相邻的数字。
n4 = [set(range(k,k+2)) for k in arr if k + 1 in arr]
for k in a if len(k) != min([len(set(k) - s) for s in n4 + 2])]
表达式b那里不太对,[j,k]是想干嘛?
🌳无向图:边没有方向的图。(即从A可以直接到B,B也可以直接到A)
🌳有向图:边有方向的图。(即从A可以直接到B,但B不能直接到A)
🌳入度:以顶点A为头的弧的数目称为A的入度。如上图所示:A的入度为0。
🌳出度:以顶点A为尾的弧的数目称为A的出度。如上图所示:A的出度为2。
问题解答:
思路:先将所有需要排除的数字放入一个列表中,然后遍历需要排除的数字,对于每一个数字,判断它以及它的前一个和后一个数字是否在排除列表中,如果不在,则保留该数字。
具体步骤如下:
exclude_list = [2, 3, 4, 5, 29, 30, 31, 32]
data = [1, 2, 3, 5, 29, 31, 33, 34, 35]
result = []
for i in range(len(data)):
if data[i] not in exclude_list and \
data[i-1] not in exclude_list and \
data[i+1] not in exclude_list:
result.append(data[i])
完整代码如下:
exclude_list = [2, 3, 4, 5, 29, 30, 31, 32]
data = [1, 2, 3, 5, 29, 31, 33, 34, 35]
result = []
for i in range(len(data)):
if data[i] not in exclude_list and \
data[i-1] not in exclude_list and \
data[i+1] not in exclude_list:
result.append(data[i])
print(result)
输出结果为:[1, 33, 34, 35]