在范围内生成唯一的数字序列(1,2,3 ... 99; 1,2,3 ... 99;),没有重复

时间:2014-02-10 13:09:20

标签: python numpy range generator

我还没有一年在业余时间用python编写代码,这是我的第一个编程语言。我需要在范围内生成一系列数字(“1,2,3 ... 99; 1,2,3 ... 99;”)并将它们与列表进行匹配。我设法做到这一点,但代码看起来很可悲,我在某些任务中失败了,例如以优雅的方式跳过具有重复/非唯一数字的系列,或者创建一个以系列长度作为参数的单个函数(例如3表示1-99,1-99和1-99,2表示1-99和1-99等等)以避免手写每个系列的功能。

我在探索numpy多维范围ndindex(在我的测试中速度慢),创建预填充列表(太大),使用set to uniquify(slow),尝试all()为“if n in”之后能够做什么y ...“,还有很多其他的东西,我有一个非常基本的代码,这也是迄今为止最快的代码。经过多次更改后,我只是回到开头,我将“if n!= n”移动到每个循环的开头,以便保存循环,现在甚至没有关于如何改进函数或转换的想法它在一个主函数中产生n个数字。任何建议都非常感谢!

y = [#numbers]

def four(a,b):
    for i in range(a,b):
        for ii in range(a,b):
            if i != ii:
                for iii in range(a,b):
                    if i != iii and ii != iii:
                        for iiii in range(a,b):
                            if i != iiii and ii != iiii and iii != iiii:
                    if i in y and ii in y and iii in y and iiii in y:#exact match
                                    #do something
four(1,100)

2 个答案:

答案 0 :(得分:2)

感谢user2357112关于使用itertools.permutations的建议(xrange(a,b),4)我做了以下操作,我非常满意,它快速而且好看:

def solution(d, a, q):
    for i in itertools.permutations(xrange(d, a), q):
    #do something

solution(1,100,4)

感谢这个出色的社区。

答案 1 :(得分:-1)

创建数组[100],填充0到99之间的数字。然后使用随机生成器将它们混合。然后只需要需要的数字。