寻找关于我的代码和想法是否有效的建议,或者我应该尝试不同的方法。我不是在寻找完整的答案,而是提示。一个简单的"继续/尝试"或者"尝试别的东西"就够了。
我的功能有两个参数,都是列表。它们需要具有相同的长度才能进行比较,否则程序返回False。
索引i
中的对象被移动到索引(i+m)%k
,其中k
是列表的长度,m
是索引{{1}中的项目的数量1}}已经移动了。
我的想法是:
从两个长度为i
的列表中,我将单独检查每个索引,如果它发现索引已被移动k
,则会将(i+m)%k
添加到计数器。
对于大小为3的列表,有3种循环排列的可能性,因此如果计数器点击1
,它将返回3
。
True
答案 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(列表)轮换之后没有匹配那么那里不是循环。像这样的东西
...代码已删除...