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

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(<b>my_list,my_list[1:],my_list[2:]</b>))

所以 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})