我正在尝试编写模11代码,但我无法使它更像Python。
目前,我使用一个权重并增加它,检查当它达到一个数字时,然后将其设置为其原始值。
假设我有一个数字列表1..20
,我想将它们乘以2,3,4,5,6,7,8,9,2,3,4等
,以便每个索引都乘以递增的数字。
1x2,2x3,3x4,4x5,5x6,6x7,7x8,8x9,9x2,10x3等。
有没有一种优雅的方法来实现这个?
不太优雅的方法:
def mod11(list, max_weight=9):
sum = 0
weight = 2
for item in reversed(list):
sum += item * weight
weight += 1
if weight > max_weight:
weight = 2
mod = 11 - sum % 11
if mod > 9:
return 0
else:
return mod
列表推导式
。 - Ozgur Vatanseveritertools.cycle
。提示:使用*cycle(range(2,max_weight + 1))*。 - Ozgur Vatansever