Python 座位安排-如何仅选择邻居组合

Python 座位安排-如何仅选择邻居组合,python,itertools,Python,Itertools,我使用itertools.combinations来列出列表中所有可能的组合……但是如何只选择邻居,以便用户都在一起 list =[1,2,3,4,5,6,7,8,9,10,11,12] occupied = [2,6,7,11] 剩余的座位还有。。。现在我如何安排两个人在一起,总是坐在空位上 1 0 3 4 5 0 0 8 9 10 0 12 正确的组合是(1,3)(3,4)(3,5)(8,9)(9,10)(10,12)(因为它是两个人..我们可以交换他们..所以有两种可能的方式。。。目前

我使用itertools.combinations来列出列表中所有可能的组合……但是如何只选择邻居,以便用户都在一起

list =[1,2,3,4,5,6,7,8,9,10,11,12]
occupied = [2,6,7,11]
剩余的座位还有。。。现在我如何安排两个人在一起,总是坐在空位上

1 0
3 4
5 0
0 8
9 10
0 12
正确的组合是
(1,3)(3,4)(3,5)(8,9)(9,10)(10,12)
(因为它是两个人..我们可以交换他们..所以有两种可能的方式。。。目前我总共有28个…我如何删除其余的…任何指导都将不胜感激 /*刚刚添加了我的代码/ 将numpy作为np导入 进口itertools 从itertools导入置换、组合、组合和替换

def座椅布置(arr): arry=arr.split(',') larr=[int(x)表示arry中的x]

total = (larr[0])
occ = larr[1:]  
     
totals = [x+1 for x in range(0,total)]
print(totals)

for val in totals:
    if val in occ:
           item= totals.index(val)
           totals[item] = 0
print(totals)
#结果=列表(过滤器(λx:x!=0,总计)) 结果=[如果x!=0,则x代表x总计] 打印(结果)

comb=组合(结果,2)
data=itertools.dropwhile(λx:x<5,[3,12,7,1,-5])
打印(列表(梳))
avl=[]
#总共有8个座位,两个用户将始终坐在一起#此外,并非所有席位都是连续的
对于枚举中的i,x(总计):
如果(i+1)%2==0:
打印('偶数#:',i+1,'is:',x)
data=itertools.dropwhile()
打印(数据)
其他:
打印('odd#:',i+1,'is:',x)

我建议使用一种方法,根据占用列表和位置验证一对的有效性

def is_pair_valid(pair, occupied_list):
    # check occupied
    x, y = min(pair), max(pair)
    if x in occupied_list or y in occupied_list:
        return False
    # check neighbours
    diff = y - x
    return diff in (2, 1, -2) if x % 2 == 1 else diff in (2, -1, -2)
  • 奇数:另一个应位于距离
    +2、+1或-2
    (例如
    3
    1,4,5
  • 偶数:另一个应位于距离
    +2、-1或-2
    (例如
    4
    2,3,6
然后

给出正确的

(1, 3)
(3, 4)
(3, 5)
(8, 10)
(9, 10)
(10, 12)

你能分享你的尝试吗?你的帖子和添加代码我添加了代码。
values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
occupied = [2, 6, 7, 11]

for p in filter(lambda x: is_pair_valid(x, occupied), combinations(values, r=2)):
    print(p)
(1, 3)
(3, 4)
(3, 5)
(8, 10)
(9, 10)
(10, 12)