Python:迭代遍历列表

9

我有一个思维挑战谜题,想用Python解决。他们给出4个数字(25、28、38、35),要求我们将这些数字放在...+...-...=... 中。一种可能的解决方案是 25+38-35=28。我尝试着用这些数字创建一个列表,通过一些循环和 if 语句进行迭代:

lst=[25, 28, 38, 35]

for z in lst:
    for x in lst:
        for c in lst:
            for v in lst:
                 if z+x-c==v:
                     print z,x,c,v

但是当我运行for循环时,数字会重复出现,例如(25+25-25=25),这并不能起到作用。我该如何解决这个问题?


11
查阅 itertools.permutations。 - user2097159
除了在Python中查看所有排列的最佳方法之外,还要考虑(通过将“c”添加到方程的两侧)您正在寻找四个值中的任意两个值,这些值加起来等于总和的一半。因此,您实际上不需要所有24个排列,您可以只考虑6个分区:从itertools.permutations(lst,2)的前6个值开始。如果这些值是整数且总和为奇数,则忘记它 :-) - Steve Jessop
2个回答

9
正如Luis的评论所暗示的那样,一个好的方法是:
import itertools

for z, x, c, v in itertools.permutations(lst):
    if z+x-c==v:
        print z,x,c,v

"平的比嵌套的更好",在与Python交互的命令提示符下使用import this会提醒你 :-)

1
Def recadd(lis):
       If lis[0] + lis[1] - lis[2]] = lis[3]:
                return lis
       Else: 
               recadd(lis[3] + lis[0:2])
               recadd(lis[0] + lis[3] + lis[1:2])
               recadd(lis[0:1] + lis[3]. + lis[2])

快速但不完美的移动端hack,可以优雅地扩展到k个数字,未经测试但应该可以工作。
编辑:意识到如果没有解决方案,则无法工作。无限递归...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接