python - 数组中的一个多余元素总是留下
问题描述
我正在研究信用卡验证器。那个球体对我来说是新的,所以请不要笑:D 我正在尝试在没有任何库的情况下完成它。
def creditCardValidation(creditcard):
creditcard = creditcard.replace( ' ', '' )
creditcard = [int(i) for i in creditcard]
evens = creditcard[::2]
odds = creditcard[1::2]
evens = [element * 2 for element in evens]
for j in evens:
if j >= 10:
j = [int(d) for d in str(j)]
for x in j:
evens.append(x)
for j in evens:
if j >= 10:
evens.remove(j)
return ((sum(evens) + sum(odds)) % 10 == 0)
creditCardValidation('1234 5678 9101 1213')
creditCardValidation('4561 2612 1234 5464')
creditCardValidation('4561 2612 1234 5467')
所以问题出在数组evens中。它返回
[2, 6, 14, 0, 2, 2, 1, 0, 1, 4, 1, 8]
[8, 4, 2, 2, 6, 12, 1, 2, 1, 0, 1, 2]
[8, 4, 2, 2, 6, 12, 1, 2, 1, 0, 1, 2]
除了大于 10 的结果外,它应该返回相同的结果。一切正常。看看第一个数组,删除了 18 和 10,但没有删除 14。
解决方案
在迭代数组时删除不是最好的做法,并且主要会导致在迭代时跳过数组中的某些元素,因此这是一种更安全的方法
for j in evens:
if j >= 10:
evens.remove(j)
是收集您要在另一个列表中删除的所有元素,然后如果您正在使用numpy arrrays
或删除它们,则将其从原始元素中减去,因为 python 列表没有定义减法运算来从另一个数组中减去一个数组
to_remove = []
for j in evens:
if j >= 10:
to_remove.append(j)
for j in to_remove:
events.remove(j)
或者你可以白名单而不是黑名单
small_evens = []
for j in evens:
if j < 10:
small_evens.append(j)
# use small_evens and discard evens array
推荐阅读
- git - Gitlab'命令行指令'显示不正确的信息
- linux - 在 bash 脚本 (CRON) 中获取 mac 地址
- json - 删除 JSON 文件中字符串的值
- ruby-on-rails - 文件名中带有数字的Rails连字符不起作用
- regex - 在 Joomla 3.9.28 中使用 .htaccess 进行正则表达式重定向的问题
- python - 如何在 pandas 的同一个 Excel 列表中组合来自不同表的数据?
- android - 检测应用程序是否从华为应用市场安装
- python-3.x - XML 日志文件打印到漂亮
- javascript - JavaScript IntersectionObserver rootMargin 不起作用
- python - 使用两个相同的列信息,合并第三列