从字母数字中查找缺失数字 - Python

1 投票
2 回答
840 浏览
提问于 2025-04-15 11:08

我想知道如何用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

你可以这样来处理这个问题:

  1. 把文件名转换成合适的整数。
  2. 找出缺失的数字。
  3. 把缺失的数字和文件名模板结合起来,作为输出。

对于第一步,如果文件的结构是可以预测的,那就简单多了。

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

撰写回答