我需要连接出现在单词列表中的某些单词,例如"computer"
(如下)。由于断行,这些单词在列表中显得分开,我想解决此问题。
lst=['love','friend', 'apple', 'com', 'puter']
预期结果是:
lst=['love','friend', 'apple', 'computer']
我的代码不起作用。谁能帮助我做到这一点?
我正在尝试的代码是:
from collections import defaultdict
import enchant
import string
words=['love', 'friend', 'car', 'apple',
'com', 'puter', 'vi']
myit = iter(words)
dic=enchant.Dict('en_UK')
lst=[]
errors=[]
for i in words:
if dic.check(i) is True:
lst.append(i)
if dic.check(i) is False:
a= i + next(myit)
if dic.check(a) is True:
lst.append(a)
else:
continue
print (lst)`
答案 0 :(得分:1)
代码的主要问题是,一方面,您在for
循环中迭代myit
,另一方面,通过迭代器next(myit)
。这两个迭代是独立的,因此您不能在循环内使用i
来获得i
之后的单词(而且,如果printable
是最后一个单词,则不会有下一个单词)。另一方面,您的问题可能会因以下事实而变得复杂:在词典中可能存在拆分单词,而单词的部分也是如此(例如print
是一个单词,而able
和{{1也是这样) }}。
假设有一个简单的场景,其中词典中永远不会出现拆分词部分,那么我认为这种算法对您来说会更好:
import enchant
words = ['love', 'friend', 'car', 'apple', 'com', 'puter', 'vi']
myit = iter(words)
dic = enchant.Dict('en_UK')
lst = []
# The word that you are currently considering
current = ''
for i in words:
# Add the next word
current += i
# If the current word is in the dictionary
if dic.check(current):
# Add it to the list
lst.append(current)
# Clear the current word
current = ''
# If the word is not in the dictionary we keep adding words to current
print(lst)
答案 1 :(得分:1)
尽管此方法不是很可靠(例如,您可能会错过“汉堡”),但主要错误是您没有在迭代器上循环,而是在列表本身上循环。这是更正的版本。
请注意,我重命名了变量以赋予它们更具表达性的名称,并用示例词汇表将简单的word in dic
替换为字典检查-您导入的模块不属于标准库,这会使您对于没有它的代码,我们很难运行。
dic = {'love', 'friend', 'car', 'apple',
'computer', 'banana'}
words=['love', 'friend', 'car', 'apple', 'com', 'puter', 'vi']
words_it = iter(words)
valid_words = []
for word in words_it:
if word in dic:
valid_words.append(word)
else:
try:
concacenated = word + next(words_it)
if concacenated in dic:
valid_words.append(concacenated)
except StopIteration:
pass
print (valid_words)
# ['love', 'friend', 'car', 'apple', 'computer']
如果列表的最后一个单词不在字典中,则需要try ... except
部分,因为在这种情况下,next()
将引发StopIteration
。