我的代码应该做的是,运行一个文本文件(我用linenum
作为键存储在dict中),然后在每一行中搜索Lwordli
中的一个单词。如果程序找到了这个单词,那么就遍历存储在my MasterLi
中的不同列表,以确定该句子中的一个或多个其他单词是否与列表中的内容匹配。如果是,那么做condition
,如果不是,则转到elif
条件并检查另一个列表,等等。然后对txt
中的每个句子都这样做。在
对于if-else语句,我需要将多个列表存储在1个主控形状中。我正在尝试这样的事情:
Li1 = []
Li2 = []
MasterLi = Li1, Li2
Lwordli = []
然后这是一个例子,说明它需要如何在我的代码中运行,我的一些实际代码正在返回一个错误,如果有人能想出比四个For循环更好的方法,那会很有帮助,但主要关注的是如何从Master调用单个列表:
^{pr2}$回溯错误
Traceback (most recent call last):
File "C:/Users/Lewis Collins/PycharmProjects/Test/main.py", line 134, in <module>
languagemodel()
File "C:/Users/Lewis Collins/PycharmProjects/Test/main.py", line 94, in languagemodel
cword) + r'\b.*' + re.escape(lword) + r'\b'
File "C:\Users\Lewis Collins\AppData\Local\Programs\Python\Python35-32\lib\re.py", line 267, in escape
return bytes(s)
TypeError: 'str' object cannot be interpreted as an integer
我相信这个错误是由于我试图将列表存储在主列表中而导致的,因为我的代码工作得很好,如果我尝试将for循环作为:
for word in Li1:
要创建包含所有列表元素的主列表,可以使用
+
运算符,即MasterLi = Li1 + Li2
。您也可以通过使用列表的extend
方法来实现这一点。 您当前的方法是创建一个列表元组,这似乎不是您所需要的。在实际上,您的错误消息指出了调用}触发。我建议你重写这一部分:
re.escape()
中的一个问题,该问题可能由cword
或{作为:
^{pr2}$这并不能解决问题本身,但至少你会知道是什么触发了错误。在
另外,如果你所说的“主列表”是指两个列表的串联,那么它的拼写是
master_list = list1 + list2
。{cd6}是什么意思。在最后,如果您只想测试一个给定的单词是否属于给定的列表,并根据该单词来自哪个列表分支,那么还有更好的选择。假设您的
Li1
和Li2
列表在循环过程中不会发生变化,那么最好使用一个迭代器来获取(,)对并生成(<identifier>,
单词`)元组,即:然后将
for cword in MasterLi
替换为:等等,这将大大节省时间和空间(不需要建立一个巨大的“主列表”,无需进行无用的O(n)查找来找出给定单词来自哪个列表)。在
或者您可以在
(<list>, <function>)
对上的函数和链中封装“#some processing here”和“some different processing here”,即:您只需要确保两个“handler”函数使用相同的参数(如果必须返回某些内容,则返回相同类型的值)
相关问题 更多 >
编程相关推荐