繁体   English   中英

如何比较列表中连续整数的最后一位数字

[英]How to compare the last digits of consecutive integers in a list

在我制作的程序中,我需要评估列表中每个整数的最后一位,并将其与接下来的两个整数的最后一位进行比较。 我使用的代码适用于2个整数,但是当我尝试添加另一个整数时,它不起作用。 两个整数的代码是

from collections import Counter
ctr = Counter((n0%10,n1%10) for n0,n1 in zip(my_list,my_list[1:]))

我尝试的三个整数的代码是

from collections import Counter
ctr2 = Counter((n0%10,n1%10,n2%10) for n0,n1,n2 in zip(my_list,my_list,my_list[1:]))

尽管ctr2始终输出0。 我确信这是一个简单的修复程序,我只是不知道我在做什么错。 任何帮助将不胜感激。

您应该将每个列表进一步切成一个元素 ,例如:

Counter((n0%10,n1%10,n2%10) for n0,n1,n2 in zip(my_list,my_list[1:],my_list[2:]))

因此, zip(..)的第一个列表根本没有被切片(从索引0开始),第二个在索引1( [1:] ),第三个在索引2( [2:] ),如果需要更多列表,每个列表应从下一个索引开始。

通过使用比较任意数量的数字的函数,可以使其更加优雅。 喜欢:

from itertools import islice
from collections import Counter

def count_last_digits(data,n=2):
    slices = [islice(data,i,None) for i in range(n)]
    return Counter(tuple(x%10 for x in t) for t in zip(*slices))

对于n=2这将考虑每两个连续的数字。 对于n=3这将考虑每三个连续的数字,依此类推。

例如:

>>> count_last_digits([14,25,13,2])
Counter({(4, 5): 1, (3, 2): 1, (5, 3): 1})
>>> count_last_digits([14,25,13,2],3)
Counter({(5, 3, 2): 1, (4, 5, 3): 1})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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