A = [0,99,97,100,0]# sorted:B = [0,100]
此列表可以是回文,因为它可以重新排序为:
[0,0]
如果列表可以是回文,我编写了以下代码以返回True.
i=0counter = 0while i<len(B): if i+1 < len(B): if B[i]==B[i+1]: print(B[i],B[i+1]) i+=2 else: i+=1 counter += 1 else: i+=1if counter<2: return Truereturn False
但是,如果我测试列表[0,1],它会进入看起来像无限循环的东西.如何正确检查列表是否可以成为回文?
解决方法 当我们遍历B时,我们可以使用一个集来跟踪到目前为止哪些元素具有奇数(使用此处的集合比列表快得多):odds = set()for i in B: if i in odds: odds.remove(i) else: odds.add(i)
然后,如果赔率的长度为0或1,则打印True.否则打印False.
print len(odds) <= 1 # prints the value you're looking for
正如@Antti所指出的,如果您正在优化性能(大约20%的速度提升),可以通过在循环外部进行属性查找来加快速度:
odds = set()remove = odds.removeadd = odds.addfor i in B: if i in odds: remove(i) else: add(i)print len(odds) <= 1总结
以上是内存溢出为你收集整理的python – 如何检查序列是否可以变成回文全部内容,希望文章能够帮你解决python – 如何检查序列是否可以变成回文所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)