代码之家  ›  专栏  ›  技术社区  ›  Benjamin BB

Python:组合列表迭代

  •  0
  • Benjamin BB  · 技术社区  · 7 年前

    我有两个列表:

    synonymes = ['verb1', 'verb2', 'verb3']

    phrases = ['blabla verb blabla', 'blibli verb blibli', 'verb bloblo bloblo']

    我想把它们结合起来,在另一个列表中得到这个结果:

    liste = ['blabla verb1 blabla','blabla verb2 blabla', ... 'verb3 bloblo bloblo']

    下面的代码可以工作,但不是很优雅,我想将这两个列表作为执行此工作的函数的条目,这在这个解决方案中是不可能的:

    while j < len(synonymes):
        liste.append("blabla "+synonymes[j]+" blabla")
        liste.append("blibli "+synonymes[j]+" blibli")
        liste.append(synonymes[j]+" bloblo bloblo")
        j+=1
    

    如果需要的话,我可以改变这两个列表的结构,只要我能得到这个最终列表

    在python中这样做的正确方法是什么?

    谢谢

    编辑:为了让自己更清楚,下面是我想要的确切输出:

    ["blabla verb1 blabla", "blabla verb2 blabla", "blabla verb3 blabla", "blibli verb1 blabla", "blibli verb2 blibli", "blibli verb3 blibli", "verb1 bloblo bloblo", "verb2 bloblo bloblo", "verb3 bloblo bloblo"]
    

    同义词和短语的长度都是可变的。

    4 回复  |  直到 7 年前
        1
  •  1
  •   Austin    7 年前

    使用 zip 配对和 replace 要替换:

    >>> synonymes = ['verb1', 'verb2', 'verb3']
    >>> phrases = ['blabla verb blabla', 'blibli verb blibli', 'verb bloblo bloblo']
    >>> [y.replace('verb', x) for x, y in zip(synonymes, phrases)]
    ['blabla verb1 blabla', 'blibli verb2 blibli', 'verb3 bloblo bloblo']                                                  
    

    编辑:

    >>> [y.replace('verb', x) for y in phrases for x in synonymes]
    ['blabla verb1 blabla', 'blabla verb2 blabla', 'blabla verb3 blabla', 'blibli verb1 blibli', 'blibli verb2 blibli', 'blibli verb3 blibli', 'verb1 bloblo bloblo', 'verb2 bloblo bloblo', 'verb3 bloblo bloblo']                              
    
        2
  •  0
  •   Mehrdad Pedramfar    7 年前

    尝试以下操作:

    for i in enumerate(phrases):
        phrases[i[0]] = phrases[i[0]].replace('verb', synonymes[i[0]])
    

    或在一行中:

    [phrases[i[0]].replace('verb', synonymes[i[0]]) for i in enumerate(phrases)]
    
        3
  •  0
  •   Fanto    7 年前

    使用代码中使用的相同格式

    liste = [phrase.format(verb=verb) for verb, phrase in zip(synonymes, phrases)]
    

    但要做到这一点,您必须更改短语列表,如下所示:

    phrases = ['blabla {verb} blabla','blabla {verb} blabla', ... '{verb} bloblo bloblo']
    
        4
  •  0
  •   BugHunter    7 年前
    liste = phrases.copy() # create copy of phrases
    # iterate phrases with index
    for index, verb in enumerate(phrases):
        liste[index] = verb.replace("verb", synonymes[index]) # replace verb with related verb element