【问题标题】:concatenate words separated by a token in a list [duplicate]连接列表中由标记分隔的单词[重复]
【发布时间】:2019-08-07 13:21:57
【问题描述】:

我想在单词列表中连接一个由星号分隔的单词。我正在尝试的代码是:

import nltk
from nltk.tokenize import word_tokenize
import re

words = ['les','engage', '*', 'ment', 'de','la']

with open ('Fr-dictionary.txt') as fr:
    dic = word_tokenize(fr.read().lower())

l=[ ]
errors=[ ]

for n,word in enumerate (words):
    l.append(word)
    if word == "*":
        print(words[n-1], words[n+1])
        exp = words[n-1] + words[n+1]
        if exp in dic:  
            l.append(exp)
            errors.append(words[n-1])
            errors.append("*")
            errors.append(words[n+1])
        else:
            continue

print(l)
print(errors)


l=frozenset(l)
errors=frozenset(errors)

c=l.difference(errors)

print(list(c)) 

我的输出是:

['la', 'les', 'de', 'engagement'] 

但我想要的输出必须与原始列表的顺序相同,没有:

['les','engagement', 'de','la']

还有其他方法可以获得所需的输出吗?

【问题讨论】:

  • 试过join()函数?它可以带分隔符。你可以不用所有的循环。
  • 套装没有顺序,所以你不能期望使用它们有任何特定的顺序。
  • 将您的集合转换为集合。这样可以保持秩序。
  • @IrfanuddinShafi,在附加连接的单词后,我想删除单词的第一部分,星号和单词的第二部分:“engage”、“*”、“ment”
  • @IrfanuddinShafi,如何将集合转换为集合?可以展示一下吗?

标签: python list loops set concatenation


【解决方案1】:

试试这个

    while "*" in words:
        index = words.index("*")
        words.pop(index)
        words.insert(index,words.pop(index-1)+words.pop(index-1))

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多