将基于列表值的字符串拆分为Python中的列表

时间:2013-04-10 04:05:05

标签: python list roman-numerals

目前我正在尝试根据来自其他列表的匹配值从字符串创建新列表。例如,我的值列表是:

['IX', 'C', 'D', 'XL', 'I', 'XC', 'M', 'L', 'CD', 'X', 'IV', 'CM']

这些都是罗马数字。我怎么去拿一个罗马数字:

MMIX

并将其拆分为:

['M', 'M', 'IX']

基于之前的列表。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

我不确定这种方法通常可以解析罗马数字。例如,此代码无法正确解析VIII,但这是因为V不在令牌列表中。但这是一个简单的递归函数,它在输入字符串的开头查找一个标记并组装一个列表:

tokens = ['IX', 'C', 'D', 'XL', 'I', 'XC', 'M', 'L', 'CD', 'X', 'IV', 'CM']

def rn_split(numeral, results_so_far=[]):
    if len(numeral)==0:
        return results_so_far # Break the recursion
    for token in tokens:
        if numeral.startswith(token):
            results_so_far.append(token)
            recurse_numeral = numeral[ (len(token)): ]
            return rn_split(recurse_numeral, results_so_far)
    # Remainder of numeral didn't match.  Bail out
    results_so_far.append(numeral)
    return results_so_far