python – 如何检查序列是否可以变成回文
发布时间:2020-12-20 13:04:55 所属栏目:Python 来源:网络整理
导读:我必须找到一个列表是否可以作为回文.我的程序的第一部分对列表进行排序. A = [0,99,97,100,0]# sorted:B = [0,100] 此列表可以是回文,因为它可以重新排序为: [0,0] 如果列表可以是回文,我编写了以下代码以返回True. i=0counter = 0while ilen(B): if i+1 l
我必须找到一个列表是否可以作为回文.我的程序的第一部分对列表进行排序.
A = [0,99,97,100,0] # sorted: B = [0,100] 此列表可以是回文,因为它可以重新排序为: [0,0] 如果列表可以是回文,我编写了以下代码以返回True. i=0 counter = 0 while 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+=1 if counter<2: return True return 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.remove add = odds.add for i in B: if i in odds: remove(i) else: add(i) print len(odds) <= 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |