相关疑难解决方法(0)

如何检查两个列表在Python中是否循环相同

例如,我有列表:

a[0] = [1, 1, 1, 0, 0]
a[1] = [1, 1, 0, 0, 1]
a[2] = [0, 1, 1, 1, 0]
# and so on
Run Code Online (Sandbox Code Playgroud)

它们似乎是不同的,但如果假设开始和结束是连接的,那么它们是圆形相同的.

问题是,我拥有的每个列表的长度为55,并且只包含三个和52个零.没有循环条件,有26,235(55选3)列表.但是,如果条件"循环"存在,则存在大量循环相同的列表

目前我通过以下方式检查循环身份:

def is_dup(a, b):
    for i in range(len(a)):
        if a == list(numpy.roll(b, i)): # shift b circularly by i
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

在最坏的情况下,该功能需要55次循环移位操作.并且有26,235个列表可以相互比较.简而言之,我需要55*26,235*(26,235 - 1)/ 2 = 18,926,847,225次计算.它差不多是20吉加!

有没有什么好方法可以用更少的计算来做到这一点?或者支持循环的任何数据类型?

python algorithm

144
推荐指数
5
解决办法
1万
查看次数

标签 统计

algorithm ×1

python ×1