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
和。b2
p.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)
g
b2
p
t
b1
p