首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python将字符串中的字符转换为多个字符

使用Python将字符串中的字符转换为多个字符
EN

Stack Overflow用户
提问于 2014-07-16 15:07:14
回答 3查看 284关注 0票数 1

我有一个字符串列表,其前缀字符表示数字的乘数因子。所以如果我有这样的数据:

代码语言:javascript
复制
data = ['101n', '100m', '100.100f']

我想用字典

代码语言:javascript
复制
prefix_dict = {'y': 'e-24', 'z': 'e-21', 'a': 'e-18', 'f': 'e-15', 'p': 'e-12',
               'n': 'e-9', 'u': 'e-6', 'm': 'e-3', 'c': 'e-2', 'd': 'e-1',
               'da': 'e1', 'h': 'e2', 'k': 'e3', 'M': 'e6', 'G': 'e9',
               'T': 'e12', 'P': 'e15', 'E': 'e18', 'Z': 'e21', 'Y': 'e24'}

若要插入相应的字符串,请执行以下操作。当我看到与我的问题相似的其他问题时,有一个字符被翻译成另一个字符。有没有一种方法可以使用翻译功能将一个字符转换成多个字符,还是应该以不同的方式处理呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 15:20:14

您可以对此使用regex,这也适用于'da'

代码语言:javascript
复制
>>> data = ['101n', '100m', '100.100f', '1d', '1da']
>>> import re
>>> r = re.compile(r'([a-zA-Z]+)$')
>>> for d in data:
    print r.sub(lambda m: prefix_dict.get(m.group(1), m.group(1)), d)
...     
101e-9
100e-3
100.100e-15
1e-1
1e1

和使用itertools.takewhile的非正则版。

代码语言:javascript
复制
>>> from itertools import takewhile
>>> def find_suffix(s):
    return ''.join(takewhile(str.isalpha, s[::-1]))[::-1]
... 
>>> for d in data:
    sfx = find_suffix(d)
    print (d.replace(sfx, prefix_dict.get(sfx, sfx)))
...     
101e-9
100e-3
100.100e-15
1e-1
1e1
票数 5
EN

Stack Overflow用户

发布于 2014-07-16 15:12:51

尝试:

代码语言:javascript
复制
for i, entry in enumerate(data):
    for key, value in sorted(prefix_dict.items(), 
                             key = lambda x: len(x[0]), reverse=True):     
# need to sort the dictionary so that 'da' always comes before 'a'
        if key in entry:
            data[i] = entry.replace(key, value)
print(data)

这适用于字典和数据中的任意组合。如果字典键总是只有一个字符串长,那么这里有很多其他的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2014-07-16 15:12:40

代码语言:javascript
复制
 import re

data = ['101da', '100m', '100.100f']

prefix_dict = {'y': 'e-24', 'z': 'e-21', 'a': 'e-18', 'f': 'e-15', 'p': 'e-12',
               'n': 'e-9', 'u': 'e-6', 'm': 'e-3', 'c': 'e-2', 'd': 'e-1',
               'da': 'e1', 'h': 'e2', 'k': 'e3', 'M': 'e6', 'G': 'e9',
               'T': 'e12', 'P': 'e15', 'E': 'e18', 'Z': 'e21', 'Y': 'e24'}
comp = re.compile(r"[^\[A-Za-z]")
for ind,d in enumerate(data):
    pre = re.sub(comp,"",d)
    data[ind] = d.replace(pre,prefix_dict.get(pre))
print data
['101e1', '100e-3', '100.100e-15']

您可以使用pre = [x for x in d if x.isalpha()][0]而不是re

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24784285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档