检查是否来自两个给定列表,一个是另一个列表的循环置换

时间:2016-11-24 14:36:07

标签: python loops cyclic

寻找关于我的代码和想法是否有效的建议,或者我应该尝试不同的方法。我不是在寻找完整的答案,而是提示。一个简单的"继续/尝试"或者"尝试别的东西"就够了。

我的功能有两个参数,都是列表。它们需要具有相同的长度才能进行比较,否则程序返回False。

索引i中的对象被移动到索引(i+m)%k,其中k是列表的长度,m是索引{{1}中的项目的数量1}}已经移动了。

我的想法是:

从两个长度为i的列表中,我将单独检查每个索引,如果它发现索引已被移动k,则会将(i+m)%k添加到计数器。

对于大小为3的列表,有3种循环排列的可能性,因此如果计数器点击1,它将返回3

True

3 个答案:

答案 0 :(得分:1)

更正了相关代码:

def cyclic(lst1, lst2):
    number_success = 0
    if len(lst1) == len(lst2):  # checks to see if lists are equal length
        for j in range(len(lst1)): # starts with j index to test cycling
            for i in range(len(lst1)):  # starts with i index to check each spot
                if lst1[i] == lst2[(i+j)%len(lst1)]:
                    number_success += 1
            if number_success == len(lst1):
                return True
        return False
    else:
        print("idiot")

答案 1 :(得分:1)

如何将lst1与自身连接起来,然后检查lst1中是否找到了lst2? 作为使用字符串的插图:

lst1="1234"
lst2="2341"
if lst2 in lst1+lst1:
    print "yup"
else:
    print "nope"

答案 2 :(得分:0)

您的算法不起作用。您正在将lst1中的每个项目与lst2中的每个项目进行比较,并累积匹配。您的方法并不考虑项目的顺序。你基本上是在做

set(lst1) == set(lst2)

我在内部循环中添加了一个print语句,以 watch 发生了什么。我发现打印变量,计算和比较结果在试图弄清楚我在做什么时是有效的。

print(lst1[i], lst2[(i+j)%len(lst1)], lst1[i] == lst2[(i+j)%len(lst1)])

您可以通过比较两个列表来检查,如果它们相等则有一个周期,如果它们不相等,则旋转一个列表并重复,如果在len(列表)轮换之后没有匹配那么那里不是循环。像这样的东西

...代码已删除...