我有这样的范围:
1323000-1555999
有必要创建涵盖整个范围的“面具”。因此,上面范围的“掩码”列表应如下所示:
1323***
1324***
1325***
...
14*****
...
153****
154****
1550***
1551***
等等。
任何人都有关于如何使用Python解决此问题的想法?
这个想法是使用最少量的面具覆盖所有范围。所以在1000-1999的情况下,算法应该输出1 ***而不是101 *,102 * ......或10 **,11 ** ......
答案 0 :(得分:3)
稍微循环:
def wild_card_range(start, end):
while start <= end:
shift = 0
multiple = 1
done = False
over = False
still_fits = True
while not (done or over) and still_fits:
multiple *= 10
shift += 1
next_value = int(start / multiple) * multiple + multiple
done = next_value == end + 1
over = next_value > end + 1
still_fits = int(start / multiple) == \
int((start + multiple - 1) / multiple)
if over or not still_fits:
multiple = int(multiple / 10)
shift -= 1
yield str(int(start / multiple)) + '*' * shift
start += multiple
for mask in wild_card_range(1323000, 1555999):
print(mask)
1323***
1324***
1325***
1326***
1327***
1328***
1329***
133****
134****
135****
136****
137****
138****
139****
14*****
150****
151****
152****
153****
154****
1550***
1551***
1552***
1553***
1554***
1555***