python 指针指向的内容_python中指向指针的指针

编辑:添加了l == l[::-1]作为is_palindrome5,这是相当快的,也是迄今为止最具可读性和python的。在

我最快能查到回文的是这一行:def is_palindrome1(l):

return l[:len(l) / 2] == l[(len(l)+1) / 2:][::-1]

使用python的非回文函数检查最快的问题是:

^{pr2}$

这是因为该函数在开始比较元素之前不会创建任何新列表。

请注意,我使用的非回文在第一个和最后一个元素中是不同的,因此检查在第一个比较之后立即返回(对于非回文并不总是这样)。

我还测试了mistermiagi(is_palindrome3)和pm2ring(is_palindrome4)的答案:import itertools

def create_palindrome(n):

return range(1,n) + range(n,0,-1)

def is_palindrome1(l):

return l[:len(l) / 2] == l[(len(l)+1) / 2:][::-1]

def is_palindrome2(l):

left = 0

right = len(l) - 1

for i in xrange(0,len(l) / 2):

if l[right] != l[left]:

return False

left += 1

right -= 1

return True

def is_palindrome3(seq):

for l, r in itertools.izip(iter(seq), reversed(seq)):

if l != r:

return False

return True

def is_palindrome4(seq):

return all(l == r

for _, l, r in itertools.izip(xrange((1 + len(seq)) // 2),

iter(seq), reversed(seq)))

def is_palindrome5(l):

return l == l[::-1]

if __name__ == '__main__':

import timeit

setup_palindrome = "from __main__ import create_palindrome, %s; l = create_palindrome(%i)"

setup_non_palindrome = "from __main__ import %s; l=range(%i)"

def test(f, n):

return (timeit.timeit("%s(l)" % f, setup=setup_palindrome % (f, n), number=100000),

timeit.timeit("%s(l)" % f, setup=setup_non_palindrome % (f, n), number=100000))

small = 5

big = 1000

for f in is_palindrome1, is_palindrome2, is_palindrome3, is_palindrome4:

print("%s small list: palindrome: %f non-palindrome: %f" % ((f.__name__,) + test(f.__name__, small)))

for f in is_palindrome1, is_palindrome2, is_palindrome3, is_palindrome4:

print("%s big list: palindrome: %f non-palindrome: %f" % ((f.__name__,) + test(f.__name__, big)))

结果:is_palindrome1 small list: palindrome: 0.093779 non-palindrome: 0.073669

is_palindrome2 small list: palindrome: 0.087658 non-palindrome: 0.048855

is_palindrome3 small list: palindrome: 0.085866 non-palindrome: 0.056385

is_palindrome4 small list: palindrome: 0.139685 non-palindrome: 0.123519

is_palindrome5 small list: palindrome: 0.021798 non-palindrome: 0.022422

is_palindrome1 big list: palindrome: 1.589591 non-palindrome: 0.432679

is_palindrome2 big list: palindrome: 9.414250 non-palindrome: 0.043481

is_palindrome3 big list: palindrome: 7.315568 non-palindrome: 0.056859

is_palindrome4 big list: palindrome: 6.655833 non-palindrome: 0.128915

is_palindrome5 big list: palindrome: 2.095099 non-palindrome: 0.283472

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值