gpt4 book ai didi

python-2.7 - 两个整数元组之间的范围?

转载 作者:行者123 更新时间:2023-12-03 03:00:31 24 4
gpt4 key购买 nike

元组似乎非常适合版本号比较(假设只有数字元素,这在我的例子中是给定的)。我有两个由整数组成的元组形式的版本号。假设这些元组是:

minver = (1,2,3)
maxver = (1,2,9)

有没有一种简单而优雅的方法来获取从 minvermaxver 的“范围”作为列表? IE。对于上述情况,我想得到一个像这样的列表:

[(1,2,3), (1,2,4), (1,2,5), (1,2,6), (1,2,7), (1,2,8), (1,2,9)]

(注意:如果列表中缺少最后一个元素,即返回的范围包含最大值,也可以。)

range 函数显然不起作用(需要整数),但我也不想依赖于恰好是 x 元素的元组(x = 3 在上述情况下)。

例如,如果我有一个 minver tuple (1,) 它应该像 (1,0,0 ) 如果 maxver tuple 包含三个值/元素(例如 (1,2,3))。

有什么方法可以用Pythonic方式做到这一点(这是优雅的)吗?

最佳答案

好吧 - 现在是凌晨 2:30,所以原则是固定任何版本的最大长度和上限,然后将其视为数字的基数...将开始和结束转换为 int充当范围,然后使用另一个函数转换回元组...需要一些工作,但相当合理的理论...

from itertools import izip_longest, chain

minver = (1, 1, 3)
maxver = (1, 3, 19)

def version_range(start, end):
start, end = zip(*izip_longest(start, end, fillvalue=0))
base = max(max(chain(start, end)), 9) + 1
def _toint(seq, base):
return sum(base ** n * val for n, val in enumerate(reversed(seq)))
def _totuple(num, base, length):
ret = []
for n in (base ** i for i in reversed(range(length))):
res, num = divmod(num, n)
ret.append(res)
return tuple(ret)
for se in xrange(_toint(start, base), _toint(end, base) + 1):
print _totuple(se, base, len(start))


version_range(minver, maxver)

关于python-2.7 - 两个整数元组之间的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com