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

标签 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 来统一(慢)、尝试 all() 来实现“if n in”之后,我能够做什么y...”,以及许多其他事情,我有一个非常基本的代码,也是迄今为止最快的代码。经过多次更改后,我只是回到了开始,我将“if n!= n”移动到每个 for 循环的开头,以节省循环,现在甚至不知道如何改进函数或转换它在一个生成 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)

最佳答案

感谢 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)

也感谢这个出色的社区。

关于python - 生成范围 (1, 2, 3...99; 1, 2, 3...99; ) 内的唯一数字序列,没有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678165/

相关文章:

c++ - Halide 可变域减少

javascript - 当阻止浏览器的默认粘贴操作时如何修复光标位置

python - os.listdir 看不到我的目录

python - 为 contextvars.Context 提供 ContextManager

python - 如何在背景 OpenCV 和 Python 上调整和转换蒙版图像的大小

python - Tensorflow:Tensordot 可重现的结果

arrays - VBA - 从选定范围中获取值(F$1 :F$100) in Array

python - 从带有转义字符的 cookiejar 问题中请求 dict

python - 修改 Dijkstra 以进行计数

python - 将 numpy 数组的元组保存到磁盘?