python将字符串解析为单个字符

python将字符串解析为单个字符,python,string,parsing,format,character,Python,String,Parsing,Format,Character,在Python2.7中,对于一个很长的字符串(比如1000个字符),如何将“abc”解析为“abc” 或者我如何将“abccda”转换为“1234 1”?(其中每个唯一字母对应一个唯一数字,1-4) 我想我可以一个接一个地弹出这些字符,但我对Python还不熟悉,不知道是否有一个简单的函数可以实现这一点。第一次使用join(): x="abc" print re.sub(r"(?<!^)(.)",r" \1",x) 关于第二个问题: >>> s = 'abccda' &

在Python2.7中,对于一个很长的字符串(比如1000个字符),如何将“abc”解析为“abc”

或者我如何将“abccda”转换为“1234 1”?(其中每个唯一字母对应一个唯一数字,1-4)


我想我可以一个接一个地弹出这些字符,但我对Python还不熟悉,不知道是否有一个简单的函数可以实现这一点。

第一次使用
join()

x="abc"
print re.sub(r"(?<!^)(.)",r" \1",x)
关于第二个问题:

>>> s = 'abccda'
>>> ' '.join(chr(ord(c)-ord('a')+ord('1')) for c in s)
'1 2 3 3 4 1'
或者,您可以简单地使用字典将字母映射为数字:

>>> s = 'abccda'
>>> d = dict(a=1, b=2, c=3, d=4)
>>> ' '.join(str(d[c]) for c in s)
'1 2 3 3 4 1'
还有一种方法是使用
string.translate()

translate()
将是首选,因为与简单的dict查找不同,它处理未映射字符时不会出错:

>>> s='abcdefgh'
>>> ' '.join(s.translate(maketrans('abcd', '1234')))
'1 2 3 4 e f g h'

你是说列表法吗

s='abccda'


列表#['a','b','c','c','d','a']

要将每个字母转换为数字,可以使用。在这个简单的例子中,这可能是矫枉过正,但值得学习

Python2和Python3中的细节有所不同

对于Python 3,您只需使用从Unicode序号到替换字符串的映射,如下所示:

mapping = {ord(letter): str(number) for number, letter in enumerate(string.ascii_lowercase[:4], 1)}
translated = x.translate(mapping)
对于Python2,您需要一个特殊的转换表,在本例中,它不太方便(并且只允许您将字符转换为单个字符,而不是像Python3版本那样的任意字符串,这里没有问题,但是如果您想将
'j'
转换为
'10
,它将不起作用):

然后,要添加空格,请使用:


欢迎来到SO!试着一次只关注一个清晰的问题。
>>> from string import maketrans
>>> s = 'abccda'
>>> ' '.join(s.translate(maketrans('abcd', '1234')))
'1 2 3 3 4 1'
>>> s='abcdefgh'
>>> ' '.join(s.translate(maketrans('abcd', '1234')))
'1 2 3 4 e f g h'
mapping = {ord(letter): str(number) for number, letter in enumerate(string.ascii_lowercase[:4], 1)}
translated = x.translate(mapping)
mapping = string.maketrans(string.ascii_lowercase[:4], 
                           ''.join(str(i) for i in range(1, 5))
translated = x.translate(mapping)
result = ' '.join(translated)