加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读