如何用Pythonic的方法求一个字符的往后两位字符?
PHP中文网
PHP中文网 2017-04-17 13:03:37
0
5
637

想建立如下映射关系:

'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)
左手右手慢动作

我不知道為什麼還要用到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'}

需求是實現了,我覺得你可能問題關鍵不是我所回答的。

左手右手慢动作

雷雷

Python 挑戰 1 級演練

左手右手慢动作

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 :(

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板