3 回答

TA贡献1784条经验 获得超8个赞
我认为你在正确的轨道上,但你的addressGenerator函数对我来说参数太多。假设您可以将源字符串和目标字符串拆分为像(XXXXXXXXXXX, 003, X, 01, 02). 然后你有一个函数,它只接受源元组和目标元组。
所以这些是元组中的索引:
0 1 2 3 4
(XXXXXXXXXXX, 003, X, 01, 02)
我认为你想要的是在索引之间循环source[1] -> destination[1];source[3] -> destination[3]; 和source[4] -> destination[4]。这大致上是你已经拥有的。然后你可以用填充来格式化不同的东西。
def get_addresses(source, destination):
for a in range(int(source[1]), int(destination[1]):
for b in range(int(source[3]), int(destination[3])):
for c in range(int(source[4]), int(destination[4])):
yield '{}{:03d}{}{:02d}{:02d}'.format(source[0], a, source[2], b, c)

TA贡献1821条经验 获得超4个赞
我认为这行得通。这三个范围作为元组传递,每个元组都包含所需的开始和结束值(包括)。我还添加了一个separator参数,因为您的问题中显示的输出中似乎有一个无法解释的“X”。
更新:修改为根据您下面关于“来源”和“目的地”含义的评论施加限制,并删除了之前的警告。
在我看来,代码是不可读的,可能可以重构——但正如我所说,我相信它(现在)可以实现你的目标。
对其可用性的一项改进可能是使其解析src和dst字符串参数并自动确定间隔。
def addressGenerator(prefix, separator, src, dst, interval1, interval2, interval3):
minval, maxval = int(src), int(dst)
for x in range(interval1[0], interval1[1]+1):
for y in range(interval2[0], interval2[1]+1):
for z in range(interval3[0], interval3[1]+1):
v = x * 10000 + y * 100 + z
if minval <= v <= maxval:
pieces = prefix, '%03d' % x, separator, '%02d' % y, '%02d' % z
yield ''.join(pieces)
# Sample usage.
for address in addressGenerator('XXXXXXXXXXX', 'Y',
'0030102', '0040201', (3, 4), (1, 3), (1, 2)):
print(address)
输出:
XXXXXXXXXXX003Y0102
XXXXXXXXXXX003Y0201
XXXXXXXXXXX003Y0202
XXXXXXXXXXX003Y0301
XXXXXXXXXXX003Y0302
XXXXXXXXXXX004Y0101
XXXXXXXXXXX004Y0102
XXXXXXXXXXX004Y0201
添加回答
举报