我正在尝试编写一个简单的脚本来将动词连接到单词列表中。 我有这样一个名单列表的列表:奇怪的列表和索引行为
expressions = [[['battre', 'verb', 'inf', True], ['froid', 'adj', 'ms', 'False']], [['prendre', 'verb', 'inf', True], ['froid', 'adj', 'ms', False]]]
“真”意味着它的变量,而“假”意味着它shoudn't改变。 对于列表中每个列表中的每个元素,我找到标签为“verb”的元素,并构建一个匹配的flexions列表。例如,对于表达式“battre froid”,我将采用“battre”,并用动词的所有法语动词建立一个列表。我会的东西落得像
verbs = ['bat', 'bats', 'battons'..].
我想做的事未来,对于一个给定的表达式,如“battre弗罗伊德”,建立这个表达式的所有可能的flexions的列表,如“蝙蝠弗罗伊德” “battons弗罗伊德”等 那么我应该用什么落得像
res = [[['battons', 'verb', '3pPres'], ['froid', 'adj', 'ms']], ['bats', 'v', '2sPres'],['froid', 'adj', 'ms]]]
看,我的问题是不是建筑本身,它是关于结果来改变不同的地方我把它。我似乎无法确定它为什么会有不同的表现。
我要做的未来是这样的:
idx = 0 (position in the list of the verb in one expression, here 0)
for i in range(len(verbs)):
expressions[i][idx] = verbs[i] ## replacing infinitive form by conjugated one
return res
而对于一些模糊的原因,这是发生了什么: 所有动词用在动词列表中找到最后的屈曲所取代。 但是,也就是说,只有当这个位的代码是从一个函数内调用的。 在执行过程中打印时,我确切地看到了我想要的。但最后,我得到了不同的东西。 更大的问题是,我检查了循环,在函数的这些代码行的执行期间,我检查了数据,这一切都很好。 我甚至在打印完终端函数后,从终端复制粘贴了数据,并在脚本末尾重新添加了相同位数的代码(“我在范围内”),我想要的东西
它似乎只在一个函数内完成时失败。我一直坚持这两天,比较列表,复制粘贴,移动代码,检查类型,repr,打印.. 。我只是不明白为什么它在函数内部以这种方式表现,而且我需要它在这个函数中很不幸...
这里是代码,其中expr_listFormat与“表达式”相同,而flexDict是一个flexions字典(键是基数,数值是基数的折点):
编辑在原有代码:
def createVariants(expr_listFormat, flexDict):
for sublist in expr_listFormat:
if sublist[3] and sublist[1] == "v":
verbFlex = [] ## list of flexions, each flexion being a tuple like ('bats', 'v', '2s')
resList = [] ## list of copies of the expression
for flexion in flexDict[sublist[0]]:
resList.append(expr_listFormat) ## making a copy of the original for each flexion
verbFlex.append(flexion) ## list of flexions
for i in range(len(verbFlex)):
resList[i][idx] = verbFlex[i]
return resList
没有人有任何想法,为什么这不工作(或者更准确地说,为什么它的唯一的工作的功能之外,直到最后的循环函数内部) ?
在我之前的最后一个for循环打印resList和verbFlex,将其复制粘贴,和重做范围外一点,它工作得很好......我不明白这一点:(
非常感谢,并且对于这篇长文章感到抱歉,我尽可能地精确和清晰。
干杯
Xhattam
是'expr_listFormat'的名单列表字符串或列表的字符串列表? 'flexDict'究竟是什么?你能提供一个代码和输入数据的[minimal example](http://stackoverflow.com/help/mcve)吗?请注意,'resList.append(expr_listFormat)'**不会**,无论评论可能声称,做一个副本。 – jonrsharpe 2014-09-04 13:45:12
是否正确缩进了您的最后一个代码段(我的意思是:它与原始代码中的缩进完全相同)? – 2014-09-04 13:46:20
在你最后一段代码中,看起来你的第二个循环错过了缩进。 (像@ bruno-desthuilliers建议) – abrunet 2014-09-04 14:21:12