如何用Pythonic的方法求一个字符的往后两位字符?
PHP中文网
PHP中文网 2017-04-17 13:03:37
[Python讨论组]

想建立如下映射关系:

'a' -->  'c'   
'b' -->  'd'
    ...
'y' -->  'a'
'z' -->  'b'

在C中我们可以很轻松的用加法实现, 但是换到python, 我想到了以下方法:

from string import ascii_lowercase as al

my_dict = dict(zip(al, [chr((ord(x)-95)%26+97) for x in al]))

看起来一点都不cool, 主要是求字符的后两位字符那里处理的不好, 大伙有没有更pythonic点的方法呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
ringa_lee

我不知道为什么还要用到chr 和ord?? 我的意思是说:你的需求很简单啊,26个字母是知道的咯,往后错2位是么。

>>> from string import ascii_lowercase as keys
>>> vals = keys[2:] + keys[:2]
>>> dict(zip(keys, vals))
{'a': 'c', 'c': 'e', 'b': 'd', 'e': 'g', 'd': 'f', 'g': 'i', 'f': 'h', 'i': 'k', 'h': 'j', 'k': 'm', 'j': 'l', 'm': 'o', 'l': 'n', 'o': 'q', 'n': 'p', 'q': 's', 'p': 'r', 's': 'u', 'r': 't', 'u': 'w', 't': 'v', 'w': 'y', 'v': 'x', 'y': 'a', 'x': 'z', 'z': 'b'}

需求是实现了,我觉得你可能问题关键不是我所回答的。

ringa_lee
from string import maketrans 
int = "abcdefghijklmnopqrstuvwxyz"
out = "cdefghijklmnopqrstuvwxyzab"

b = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."

trans_int_out = maketrans(int, out)
print b.translate(trans_int_out)

Python Challenge Level 1 Walkthrough

ringa_lee

dict(zip(al, map(lambda x : chr((ord(x) - 95) % 26 + 97), al)) )

坐等高手...

迷茫
a = 'abcdefghijklmnopqrstuvwxyz'
b = [chr(((ord(x) - 95) % 26) + 97) for x in a]
>>> b
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b']

呵呵, 没有检验部分

巴扎黑
from string import ascii_lowercase
from itertools import cycle
from itertools import islice
from itertools import izip

N = 2

dict(izip(ascii_lowercase,
          islice(cycle(ascii_lowercase),
                 N,
                 None)))

其实一点也不 Pythonic :(

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号