如何解决Python在列表
我有一个正整数列表(索引),并且想要找到循环(这里:复制列表元素的相邻序列)作为迭代算法的一部分。迭代次数小于10^6。在每次迭代中,一个数字被附加到列表中(最初列表是空的)并且应该检查列表的循环。列表大小通常应小于 10^6,通常在 0 - 10^5 范围内,并且整数可能小于 10^6。
具有循环的列表示例(这里,更一般地说,列表可能会超出循环,并且可能包含多个甚至嵌套的循环):
- [0,5,6,1,3,8,7,0] --> [5,3]
- [0,2,4,7] --> [3],[3]
- [2,5] --> [1],[3],[1],[1,3]
- [7,9,4] --> [1,9]
没有循环的列表示例:
- [0,0]
- [0,7]
- [2,5]
- [7,4]
最快(也可以选择最优雅/pythonic)的方式**
- 查找是否存在循环,返回 True 或 False,以及
- 可选:返回所有循环,有或没有任何类型的循环排序(例如,按列表中第一个循环元素的索引,然后按循环长度)?
解决方法
这是我能给的最好的。
from math import floor
sample = samples[0]
def find_max_seq(sample):
max_possible_size_ans = floor(len(sample)/2)
possible_size_ans = list(range(1,max_possible_size_ans+1))
max_idx = len(sample)-1
outs = []
for size in possible_size_ans:
last_idx= 0
start_idx = 0
while last_idx < max_idx :
first_pair = sample[start_idx:start_idx+size]
second_start = start_idx+size
second_pair = sample[second_start:second_start+size]
if first_pair == second_pair:
outs.append(first_pair)
start_idx +=1
last_idx = second_start+size
return outs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。