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

2024-04-20 02:12:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我想我可以一个接一个地去掉这些字符,但我对Python还不熟悉,不知道是否有一个简单的函数可以做到这一点。你知道吗


Tags: 函数字符串字母数字字符abc个字符abccda
3条回答

你是说列表法吗?你知道吗

s='abccda'

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

第一个使用join()

>>> s = 'abc'
>>> ' '.join(s)
'a b c'

对于第二个:

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

>>> from string import maketrans
>>> s = 'abccda'
>>> ' '.join(s.translate(maketrans('abcd', '1234')))
'1 2 3 3 4 1'

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

>>> s='abcdefgh'
>>> ' '.join(s.translate(maketrans('abcd', '1234')))
'1 2 3 4 e f g h'
x="abc"
print re.sub(r"(?<!^)(.)",r" \1",x)

对于简单的转换,您可以尝试这个。给你映射可以在re.sub中定义repl函数

def repl(matchobj):
    if matchobj.group()=='b':
         return " "+str(1)
    elif matchobj.group()=='c':
         return " "+str(2)
x="abc"
print re.sub(r"(?<!^)(.)",repl,x)

相关问题 更多 >