无法一次迭代两个列表python

时间:2013-09-16 23:51:47

标签: python list

我的python代码有问题,但我不确定它是什么。我正在创建一个程序,创建一个包含所有可能的四位数组合的表,只要数字不重复,我知道这是成功的。然后,我创建另一个表并尝试将所有值以不同的顺序添加到此辅助表中(因此我没有,例如,1234,4321,3241,3214,1324,2413等。在这个表上。)但是,这似乎不起作用,因为第二个表只有一个值。我做错了什么?我的代码如下。哦,我知道一个值来自顶部附加1。

    combolisttwo = list()
    combolisttwo.append(1)
    combolist = {(a, b, c, d) for a in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for b in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for c in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} for d in {1, 2, 3, 4, 5, 6, 7, 8, 9, 0} if a != b and a != c and a != d and b != c and b != d and c!=d}
    for i in combolist:
        x = 0
        letternums = str(i)
        letters = list(letternums)
        for g in letters:
            n = 0
            hits = 0
            nonhits = 0
            letterstwo = str(combolisttwo[n])
            if g == letterstwo[n]:
                hits = hits + 1
            if g != letterstwo[n]:
                nonhits = nonhits + 1
            if hits == 4:
                break
            if hits + nonhits == 4:
                combolisttwo.append(i)
                break




    x = len(combolisttwo)

    print (x)

2 个答案:

答案 0 :(得分:4)

如果数字不重复,则所有可能的四位数组合

import itertools as IT
combolist = list(IT.combinations(range(10), 4))

然后,我创建另一个表并尝试向所有辅助表添加以不同顺序使用相同数字的所有值(所以我没有,例如,1234,4321,3241,3214,这张桌子上有1324,2413等。)

combolist2 = [item for combo in combolist
              for item in IT.permutations(combo, len(combo))]

有用的参考资料:

答案 1 :(得分:2)

这段代码很混乱;-)例如,你的内循环中有n = 0,但从未将n设置为其他任何东西。另一方面,您有x = 0,但从不使用x。等

使用itertools确实是最好的,但如果您正在尝试自己学习如何做这些事情,那就没问题了。首先,改变你的:

    letters = list(letternums)

    letters = list(letternums)
    print(letters)
    break

我打赌你会对你所看到的一切感到惊讶! combolist的元素是元组,因此当您执行letternums = str(i)时,会得到一个包含数字,空格,括号和逗号混合的字符串。我不认为你期待除了数字之外的任何东西。

您的letterstwo是字符串“1”(总是因为您永远不会更改n)。但这并不重要,因为您在hits循环迭代的每个时间将nonhitsfor g in letters设置为0 。因此hitsnonhits永远不会超过1。

哪个回答你的文字问题;-) combolisttwo.append(i)永远不会被执行,因为 hits + nonhits == 4永远不会成真。这就是combolisttwo保持其初始值([1])的原因。

在代码中调用print()?这将帮助您了解出现了什么问题。