python 相邻数字排除

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]是想干嘛?

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7425190
  • 这篇博客你也可以参考下:python编程-2.编写程序,输出所有由1,2,3,4这四个数字组成的素数,并且每个数字在素数中只出现一次。
  • 除此之外, 这篇博客: python数据结构之图中的 2、无向图和有向图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 🌳无向图:边没有方向的图。(即从A可以直接到B,B也可以直接到A)

    🌳有向图:边有方向的图。(即从A可以直接到B,但B不能直接到A)

    🌳入度:以顶点A为头的弧的数目称为A的入度。如上图所示:A的入度为0。

    🌳出度:以顶点A为尾的弧的数目称为A的出度。如上图所示:A的出度为2。

  • 您还可以看一下 CSDN就业班老师的Python全栈工程师特训班第十四期-直播回放课程中的 Python全栈工程师特训班第十四期-第十二周-爬虫第三周-03小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    思路:先将所有需要排除的数字放入一个列表中,然后遍历需要排除的数字,对于每一个数字,判断它以及它的前一个和后一个数字是否在排除列表中,如果不在,则保留该数字。

    具体步骤如下:

    1. 构建排除列表,包含数字3、4、30、31以及它们的前一个和后一个数字。
    exclude_list = [2, 3, 4, 5, 29, 30, 31, 32]
    
    1. 遍历需要排除的数字,保留不符合要求的数字,将符合要求的数字加入结果列表。
    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]