Python 座位安排-如何仅选择邻居组合
我使用itertools.combinations来列出列表中所有可能的组合……但是如何只选择邻居,以便用户都在一起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)(因为它是两个人..我们可以交换他们..所以有两种可能的方式。。。目前
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)