这是我想要做的一个简单的例子。 说,我有一个随机列表如下:
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
我无法在代码中写这个。有人可以帮忙吗?谢谢。
答案 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个连接字符串),您可以预先计算新列表中的连接。
当您有输入时,首先查看第一个列表。如果它不在其中,请查看新的连接字符串列表。