[英]Replace each elements of a list by another iterating each one of them
我正在使用 luhn 算法来检查信用卡号(Visa 或 MasterCard)。
我有两个清单:
credit_card_number_checked = [random numbers generated]
: 由 luhn 算法检查的信用卡号码check_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
无效的信用卡号码
然后我想用第二个列表迭代替换第一个列表的每个数字,直到我从右到左得到有点像计时器的有效数字。
例子:
输入:
credit_card_number_checked = ['5', '4', '4', '4', '6', '5', '1', '2', '8', '0', '9', '5', '8', '6
', '7', '0']
check_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
输出:
5 4 4 4 6 5 1 2 8 0 9 5 8 6 7 0
5 4 4 4 6 5 1 2 8 0 9 5 8 6 7 1
5 4 4 4 6 5 1 2 8 0 9 5 8 6 7 2
5 4 4 4 6 5 1 2 8 0 9 5 8 6 7 3...
5 4 4 4 6 5 1 2 8 0 9 5 8 6 1 0
5 4 4 4 6 5 1 2 8 0 9 5 8 6 2 0
5 4 4 4 6 5 1 2 8 0 9 5 8 6 3 0...
5 4 4 4 6 5 1 2 8 0 9 5 8 1 7 0
5 4 4 4 6 5 1 2 8 0 9 5 8 2 7 0
5 4 4 4 6 5 1 2 8 0 9 5 8 3 7 0...
目前尚不清楚为什么要在此处混合使用字符串和它,但选择一致可能会更好。
那就是说......你可以制作一个生成器,它会按以下顺序生成迭代:
def makeIters(cc, n):
for i in range(len(cc) - 1, -1, -1):
yield from (cc[:i] + [str(num)] + cc[i+1:] for num in n)
这样你就可以懒惰地遍历数字,直到找到一个通过测试的数字:
cc = ['5', '4', '4', '4', '6', '5', '1', '2', '8', '0', '9', '5', '8', '6', '7', '0']
n = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for cc in makeIters(cc, n):
if luhn(cc): # your luhn test that returns true with a good number
print(cc)
break
您可以使用相同的生成器通过filter()
获取所有好数字的列表:
list(filter(luhn, makeIters(cc, n)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.