【发布时间】:2017-04-08 21:55:12
【问题描述】:
寻求关于我的代码和想法是否有效的建议,或者我应该尝试不同的方法。我不是在寻找完整的答案,而是在寻找提示。一个简单的“继续/尝试”或“尝试其他东西”就足够了。
我有两个函数参数,都是列表。它们的长度必须相等才能进行比较,否则程序返回 False。
索引i 中的对象被移动到索引(i+m)%k,其中k 是列表的长度,m 是索引i 中的项目移动了多少。
我的想法是这样的:
从长度为k的两个列表中,我会分别检查每个索引,如果发现索引被移动了(i+m)%k,则将1添加到计数器中。
大小为 3 的列表有 3 种循环排列的可能性,因此如果计数器命中 3,它将返回 True。
def cyclic(lst1, lst2):
number_success = 0
if len(lst1) == len(lst2): # checks to see if lists are equal length
for i in range(len(lst1)): # starts with i index to check each spot
for j in range(len(lst1)): # starts with j index to test cycling
if lst1[i] == lst2[(i+j)%len(lst1)]:
number_success += 1
else:
continue
if number_success == len(lst1):
return(True)
else:
return(False)
else:
print("idiot")
【问题讨论】:
-
如果列表中的元素匹配,则返回 True,与它们的排序方式无关,因为 if 检查是在两个循环之外完成的。
-
我对循环排列一无所知,所以我做了一些简短的阅读;您确定 3 个列表有 3 个可能的循环排列吗?他们不会是
{1,2}、{2,3}、{1,3}和{1,2,3}(4 种可能性)吗? -
@Adirio 你是对的。它似乎只适用于长度为 3 的列表。投入长度为 4 的列表会给我错误的返回
-
@lucasnadalutti 只检查列表中的数字
-
@RonaldB 尝试再缩进这两行:
if number_succes == len(lst1):和return(True)。 else 子句保持原样。