from itertools import permutations
g = 'AB BC CD DA'.split()
t = '24 13 24 13'.split()
print('1 2 3 4')
for p in permutations('ABCD'):
if all(str(p.index(b2) + 1) in t[p.index(b1)] for b1, b2 in g): # 7
print(*p)
break
from itertools import permutations
g = 'AB BC CD DA'.split()
t = '24 13 24 13'.split()
print('1 2 3 4')
for p in permutations('ABCD'):
if all(str(p.index(b2) + 1) in t[p.index(b1)] for b1, b2 in g): # 7
print(*p)
break
如果我正确计算了行号的话:D
步步:
for b1, b2 in g:- 我们迭代可迭代对象中的元素g。假设每个元素由两个值组成,在每次迭代时g分配给变量b1和。b2p.index(b1)b1- 查找列表中元素的索引/位置p。t[p.index(b1)]- 使用找到的索引b1访问对象中的元素t。p.index(b2)b2- 查找列表中元素的索引p。p.index(b2) + 1-b2索引中添加 1。str(...)- 将结果p.index(b2) + 1数字转换为字符串。... in ...- 检查字符串(在步骤 6 中获得)是否作为子字符串包含在t步骤 3 中获得的值中。对每一对都执行此检查(b1, b2)。all(...)(b1, b2)- 此函数获取来自的每一对的所有测试结果(来自步骤 7)g。仅True当所有检查都返回时它才返回True。如果至少有一张支票被退回False,all()它将被退回False。if ...:- 仅当函数all()返回时才会执行冒号后面的函数True。摘要:如果对于中的
if每一对,字符串表示形式(中的索引加 1)都包含在与 中的索引相对应的元素中,则条件为真。(b1, b2)gb2ptb1p