[英]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.