如何在循环中创建新列表并为其命名,以便使用Python填充来自另一个列表的项目?
问题描述:
我做了一个循环的双重循环,首先从一个基的列表中抽出一个单词,然后遍历相同的列表寻找相似的单词(比例为70%)。 我需要的是每当第一个循环从列表中取出一个单词时,它会创建一个新的列表,其中包含由第二个循环选择的单词+相似的单词。如何在循环中创建新列表并为其命名,以便使用Python填充来自另一个列表的项目?
我尝试了很多与列表推导,但我无法弄清楚如何把第二个循环的话放入新的列表。我认为它可以工作,如果每个创建的列表都有一个索引(x)。 这里是我的代码:
x = 0
result = [[] for x in range(len(radicals))]
for i in range(0, len(radicals)) :
for j in range(1, len(radicals)) :
result[x].append(words[i])
result[x].append(words[j])
print(result[0])
我得到的结果是词的*基的数量*单的数量...
的词表:
words = ["flore", "fleur", "fleuriste", "remaniement", "remanier", "manier", "maniable", "désaimer", "aimer", "aimant", "mêler", "emmêler", "désemmêler"]
后打印结果(部首):
['flore', 'fleur', 'fleur', 'manie', 'mani', 'mani', 'mani', 'aim', 'aim', 'aim', 'mêl', 'mêl', 'emmêl']
我试图在新列表中放置单词而不是单词,我只需要激进的匹配过程。
我需要这样的:
['flore', 'fleur', 'fleuriste']
['manier', 'remanier', 'remaniement']
['désaimer', 'aimer', 'aimant']
['mêler', 'emmêler', 'désemmêler']
我真的需要你的帮助。非常感谢 !
答
我认为你需要像这样
def is_match(radical_1, radical_2):
# return true if two radical are the same.
# ...
n = len(radicals)
result = []
used_js = []
for i in range(n):
if i in used_js:
continue
matches = [words[i]]
js = (x for x in range(n) if x != i and x not in used_js)
for j in js:
if is_match(radicals[i], radicals[j]):
matches.append(words[j])
used_js.append(j)
result.append(matches)
你意识到你正在使用相同的变量名的变量和你的`for`循环迭代都
+0
非常感谢Kirill Ermolov,它非常完美! –
?实际使用的唯一变量是'x' – Mangohero1
您能否提供一个“*基”和预期结果的例子? –
@KirillErmolov我刚刚编辑了我的问题:) –