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