繁体   English   中英

用另一个迭代列表中的每个元素替换列表中的每个元素

[英]Replace each elements of a list by another iterating each one of them

我正在使用 luhn 算法来检查信用卡号(Visa 或 MasterCard)。

我有两个清单:

  1. credit_card_number_checked = [random numbers generated] : 由 luhn 算法检查的信用卡号码
  2. check_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    当 luhn 算法告诉我:

    无效的信用卡号码

然后我想用第二个列表迭代替换第一个列表的每个数字,直到我从右到左得到有点像计时器的有效数字

例子:
输入:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM