从字母数字中查找缺失数字 - Python
我想知道如何用Python写一个函数,来判断一组文件名是否符合某个特定的模式,并找出哪些文件在这个模式中缺失。比如说:
输入 ->
KUMAR.3.txt
KUMAR.4.txt
KUMAR.6.txt
KUMAR.7.txt
KUMAR.9.txt
KUMAR.10.txt
KUMAR.11.txt
KUMAR.13.txt
KUMAR.15.txt
KUMAR.16.txt
期望的输出-->
KUMAR.5.txt
KUMAR.8.txt
KUMAR.12.txt
KUMAR.14.txt
输入 -->
KUMAR3.txt
KUMAR4.txt
KUMAR6.txt
KUMAR7.txt
KUMAR9.txt
KUMAR10.txt
KUMAR11.txt
KUMAR13.txt
KUMAR15.txt
KUMAR16.txt
期望的输出 -->
KUMAR5.txt
KUMAR8.txt
KUMAR12.txt
KUMAR14.txt
2 个回答
2
你可以这样来处理这个问题:
- 把文件名转换成合适的整数。
- 找出缺失的数字。
- 把缺失的数字和文件名模板结合起来,作为输出。
对于第一步,如果文件的结构是可以预测的,那就简单多了。
def to_num(s, start=6):
return int(s[start:s.index('.txt')])
给定:
lst = ['KUMAR.3.txt', 'KUMAR.4.txt', 'KUMAR.6.txt', 'KUMAR.7.txt',
'KUMAR.9.txt', 'KUMAR.10.txt', 'KUMAR.11.txt', 'KUMAR.13.txt',
'KUMAR.15.txt', 'KUMAR.16.txt']
你可以通过:map(to_num, lst)
来获取一个已知数字的列表。当然,要找出缺口,你其实只需要最小值和最大值。把这些和range
函数结合起来,你就能得到所有应该出现的数字,然后把你已经有的数字去掉。这里用集合会很有帮助。
def find_gaps(int_list):
return sorted(set(range(min(int_list), max(int_list))) - set(int_list))
把这些都放在一起:
missing = find_gaps(map(to_num, lst))
for i in missing:
print 'KUMAR.%d.txt' % i