【问题标题】:How can I create new lists in a loop and name them so I can fill them up with items from another list using Python?如何在循环中创建新列表并命名它们,以便我可以使用 Python 用另一个列表中的项目填充它们?
【发布时间】:2018-03-25 17:59:15
【问题描述】:

我创建了一个双 for 循环,它首先从部首列表中获取一个单词,然后遍历同一个列表以寻找相似的单词(比例为 70%)。 我需要的是,每次第一个循环从列表中获取一个单词时,它都会创建一个新列表,其中包含单词+第二个循环选择的相似单词。

我对列表推导进行了很多尝试,但我不知道如何将第二个循环中的单词放入新列表中。我认为如果创建的每个列表都有一个索引(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"]

print(radicals) 后的结果:

['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']

我真的可以使用你的帮助。非常感谢 !

【问题讨论】:

  • 您意识到您对变量和for 循环迭代使用相同的变量名称?实际使用的唯一变量是x
  • 您能否提供radicals 的示例和预期结果?
  • @KirillErmolov 我刚刚编辑了我的问题 :)
  • @mangoHero1 x 创建的列表与部首中的项目一样多,我尝试使用 [x] 作为列表的索引,例如 result[0] = first list created, result[ 1] = second...当然它不是这样工作的,但我不明白你的评论,因为 i 和 j 很好地迭代了部首列表?
  • 我想说的是你不需要声明一个变量 (i = 0) 来在 for 循环中使用一个变量 (for i in range(len(radicals)))

标签: python list for-loop indexing list-comprehension


【解决方案1】:

我认为你需要这样的东西

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)

【讨论】:

  • 非常感谢 Kirill Ermolov,它运行良好!
猜你喜欢
  • 2021-06-16
  • 2020-07-30
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2023-03-06
  • 2022-11-01
相关资源
最近更新 更多