Python 不能同时遍历两个列表

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

我的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)
四位数字的所有可能组合,前提是数字不重复:

然后,我创建另一个表,并尝试将使用相同数字的所有值以不同的顺序添加到该辅助表中(因此,我在此表上没有1234、4321、3241、3214、1324、2413等):


有用的参考资料:

  • --用于枚举不替换的元素集合
  • --用于以所有可能的顺序枚举元素集合
四位数字的所有可能组合,前提是这些数字不重复:

然后,我创建另一个表,并尝试将使用相同数字的所有值以不同的顺序添加到该辅助表中(因此,我在此表上没有1234、4321、3241、3214、1324、2413等):


有用的参考资料:

  • --用于枚举不替换的元素集合
  • --用于以所有可能的顺序枚举元素集合

此代码非常混乱;-)例如,您的内部循环中有
n=0
,但从未将
n
设置为任何其他值。另一方面,您有
x=0
,但从不使用
x
。等等

使用
itertools
确实是最好的,但如果你想自己学习如何做这些事情,那就好了。首先,请更改您的:

    letters = list(letternums)

我打赌你会对你所看到的感到惊讶!您的组合列表的元素是元组,因此当您使用
letternums=str(i)
时,您会得到一个混合了数字、空格、括号和逗号的字符串。我认为你除了数字以外什么都不期待

您的
字母two
是字符串“1”(总是,因为您从不更改
n
)。但这没什么大不了的,因为每次循环迭代字母g的
时,您都会将
命中次数
非命中次数
设置为0。因此,
hits
nonhits
不能大于1

这回答了你的字面问题;-)<代码>combolisttwo.append(i)
从未执行,因为
hits+nonhits==4
永远不会为真。这就是为什么
combolisttwo
保持其初始值(
[1]


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

此代码非常混乱;-)例如,您的内部循环中有
n=0
,但从未将
n
设置为任何其他值。另一方面,您有
x=0
,但从不使用
x
。等等

使用
itertools
确实是最好的,但如果你想自己学习如何做这些事情,那就好了。首先,请更改您的:

    letters = list(letternums)

我打赌你会对你所看到的感到惊讶!您的组合列表的元素是元组,因此当您使用
letternums=str(i)
时,您会得到一个混合了数字、空格、括号和逗号的字符串。我认为你除了数字以外什么都不期待

您的
字母two
是字符串“1”(总是,因为您从不更改
n
)。但这没什么大不了的,因为每次循环迭代字母g的
时,您都会将
命中次数
非命中次数
设置为0。因此,
hits
nonhits
不能大于1

这回答了你的字面问题;-)<代码>combolisttwo.append(i)
从未执行,因为
hits+nonhits==4
永远不会为真。这就是为什么
combolisttwo
保持其初始值(
[1]


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

您是否尝试过zip()函数?您是否尝试过zip()函数?这将创建combolist2作为一个表来解决该问题(123443214113242413等)。我知道这一点,因为它返回的值(5040)与。。。1,2,3,4,5,9,9,0}0}为b{1,2,3,3,3,3,4,4,5,5,6,6,6,6,7,6,6,7,8,5,6,6,b,5,6,b,6,b,6,b,5,b,5,6,b,8,6,b,7,b,8,6,7,8,8,7,8,7,8,7,8,7,8,7,7,8,7,7,8,7,8,7,7,8,7,8,7,7,8,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,7,0,0,0,0,0,0,0,0 0 0 0 0 0 0 0 0 0 0 0 0 0我知道这一点,因为它返回的值(5040)与。。。组合表={1,2,3,4,5,6,7,8,9,0}中的a的{(a,b,c,d)}中的b的{1,2,3,4,3,8,9,0}中的c的{1,2,3,4,5,6,7,8,9,0}中的c的{1,2,3,4,5,5,6,7,8,9,0}中的d的{
    letters = list(letternums)
    letters = list(letternums)
    print(letters)
    break