分配一个两个组合的字符串并将它们分隔在一个列表中

时间:2011-09-14 09:33:41

标签: python

这是我想要做的一个简单的例子。 说,我有一个随机列表如下:

aa = 1
b = 2
c = 3
ao = 4
uw = 5
d = 6 
ih = 7

我将程序的输入作为:

b d aa aw ay c

在输入中,有些字符串没有值,并且不在列表中,如'aw'和'ay'。所以,我必须将它们更改为列表中的字符串。但问题是,'aw'和'ay'是两个字符串的组合。例如,我必须将'aw'更改为ao + uw,将'ay'更改为ao + ih并形成列表。所以输入的新列表应该是,

b
d
aa
ao
uw
ao
ih
c

最终输出应该是它们对应的值,

2 6 1 4 5 4 7 3  

我无法在代码中写这个。有人可以帮忙吗?谢谢。

3 个答案:

答案 0 :(得分:1)

步骤1.分配音素值。你已经做了一些。你需要完成所有37.这不应该太难。

aa = 1
b = 2
c = 3
ao = 4
uw = 5
d = 6 
ih = 7

步骤2.分配作为列表的dipthong变量。这也不算太难。

aw= [ ao, uw ]
ay= [ ao, ih ]

步骤3.创建嵌套列表。双元音将成为子列表。

nested = [ b, d, aa, aw, ay, c ]

步骤4.展平嵌套列表。

def flatten( some_list ):
    for x in some_list:
        if isinstance(x,collections.Sequence):
            for v in flatten(x):
                yield v
        else:
            yield x

result= list( flatten( nested ) )

答案 1 :(得分:1)

怎么样......

str_converter = {'aa': 1, 'b':2, 'c':3, 'ao': 4, 'uw':5, 'd':6, 'ih':7}
pre_converter = {'aw': ['ao', 'uw'], 'ay': ['ao', 'ih']}

input = ['b', 'd', 'aa', 'aw', 'ay', 'c']

work_list = []

for in_string in input:
    converted_str = pre_converter.get(in_string)
    if converted_str is None:
        work_list.append(in_string)
    else:
        work_list.extend(converted_str)

for work_string in work_list:
    print str_converter.get(work_string)

答案 2 :(得分:0)

我理解如果字符串在初始列表中,则输出是关联的数字,如果不是,则表示您正在寻找将此字符串分解为2个连接字符串的内容。

首先,您必须考虑是否存在独特的分解(例如,您可能有ab + bc = ac = ad + dc)。

然后解决您的问题,如果您只查找一级分解(不超过2个连接字符串),您可以预先计算新列表中的连接。

当您有输入时,首先查看第一个列表。如果它不在其中,请查看新的连接字符串列表。