Python 将字符串空间映射到单词列表?

Python 将字符串空间映射到单词列表?,python,Python,我有一根绳子 flagged_line = "V. Divakar Botcha1,2, Mengdie Zhang1, Kuilong Li1,2, Hong Gu1,2, Zhonghui Huang1, Jianhui Cai3, Youming Lu1, Wenjie Yu3, and Xinke Liu1* " 和单词列表如下所示 words = ['V.', 'Divakar', 'Botcha', '1', ',', '2', ',', 'Mengdie', 'Zhang',

我有一根绳子

flagged_line = "V. Divakar Botcha1,2, Mengdie Zhang1, Kuilong Li1,2, Hong Gu1,2, Zhonghui Huang1, Jianhui Cai3, Youming Lu1, Wenjie Yu3, and Xinke Liu1*  "
和单词列表如下所示

words = ['V.', 'Divakar', 'Botcha', '1', ',', '2', ',', 'Mengdie', 'Zhang', '1', ',', 'Kuilong', 'Li', '1', ',', '2', ',', 'Hong', 'Gu', '1', ',', '2', ',', 'Zhonghui', 'Huang', '1', ',', 'Jianhui', 'Cai', '3', ',', 'Youming', 'Lu', '1', ',', 'Wenjie', 'Yu', '3', ',', 'and', 'Xinke', 'Liu', '1', '*']
它们都来自两个不同的程序,现在我需要将字符串中的空格映射到列表中的单词,如:(注意,单词后面的尾随空格后跟空格)

我尝试的是逐字符检查它们,然后分配空格

index_str = 0
for elem in words:
    for e in elem:
        if e == flagged_line[index_str]:
            index_str+=1
            pass
        else:
            index_str+=1
            elem = elem+' '  # issue not generalized for spaces
            print('"',elem,'"')
更新:

列表元素将包含空间,以帮助映射

字符串是

"V. Divakar  "
名单是

['V.','Divakar']
那么最后的名单应该是

['V. ','Divakar  ']
稍后,我将迭代列表并将元素附加到下一个函数中


结尾也可以有多个空格

我假设
标记的行
单词
完全匹配。您可以通过一次操作完成此操作,只需保留
标记行的
索引
,然后跳过
len(word)
,查找一个单词后是否有空格,如果有,请添加到结果中:

flagged_line = "V. Divakar Botcha1,2, Mengdie Zhang1, Kuilong Li1,2, Hong Gu1,2, Zhonghui Huang1, Jianhui Cai3, Youming Lu1, Wenjie Yu3, and Xinke Liu1*  "
words = ['V.', 'Divakar', 'Botcha', '1', ',', '2', ',', 'Mengdie', 'Zhang', '1', ',', 'Kuilong', 'Li', '1', ',',
         '2', ',', 'Hong', 'Gu', '1', ',', '2', ',', 'Zhonghui', 'Huang', '1', ',', 'Jianhui', 'Cai', '3', ',',
         'Youming', 'Lu', '1', ',', 'Wenjie', 'Yu', '3', ',', 'and', 'Xinke', 'Liu', '1', '*']

words_with_spaces = []
idx = 0
for i, word in enumerate(words):
    idx += len(word)
    cur_word = word
    while idx < len(flagged_line) and flagged_line[idx] == ' ':
        cur_word += ' '
        idx += 1
    words_with_spaces.append(cur_word)

print(words_with_spaces)

希望这对您有所帮助,如果您还有其他问题,请发表评论。:)

使用
str.find()
查找子字符串的一行程序,如果子字符串存在,请附加空格:

flagged_line = "V. Divakar Botcha1,2, Mengdie Zhang1, Kuilong Li1,2, Hong Gu1,2, Zhonghui Huang1, Jianhui Cai3, Youming Lu1, Wenjie Yu3, and Xinke Liu1*  "    
words = ['V.', 'Divakar', 'Botcha', '1', ',', '2', ',', 'Mengdie', 'Zhang', '1', ',', 'Kuilong', 'Li', '1', ',', '2', ',', 'Hong', 'Gu', '1', ',', '2', ',', 'Zhonghui', 'Huang', '1', ',', 'Jianhui', 'Cai', '3', ',', 'Youming', 'Lu', '1', ',', 'Wenjie', 'Yu', '3', ',', 'and', 'Xinke', 'Liu', '1', '*']

print(['{0} '.format(x) if flagged_line.find(x + " ") != -1 else x for x in words ])
输出

['V. ', 'Divakar ', 'Botcha', '1', ', ', '2', ', ', 'Mengdie ', 'Zhang', '1', ', ', 'Kuilong ', 'Li', '1', ', ', '2', ', ', 'Hong ', 'Gu', '1', ', ', '2', ', ', 'Zhonghui ', 'Huang', '1', ', ', 'Jianhui ', 'Cai', '3', ', ', 'Youming ', 'Lu', '1', ', ', 'Wenjie ', 'Yu', '3', ', ', 'and ', 'Xinke ', 'Liu', '1', '* ']

您希望最终产品是什么?对我来说,这不是很清楚,问题还不清楚。第二个列表中的元素是否总是必须按给定的顺序使用?如果不是,所有元素是否都是不同的?(那么为什么不使用一套呢?)问题很清楚,但你为什么想要这样?首先,为什么不按照要求的形式列出单词列表?@Austin,你介意解释一下吗?@Ev.Kounis,据我观察,
单词
中的元素必须加空格,如果
标记线
中的空格也在该单词后面(只是我的观察)。如果
标记线=例如,“V.Divakar V.Botcha1…”
words=['V','Divakar','V','Botcha','1',…]
。因为
find
总是找到第一个发生。@Austin输出正是OP想要的结果,甚至是公认答案中的结果,如果我遗漏了什么,请告诉我。请尝试我的输入。我认为second
V.
不应该在输出的末尾包含空格。当然,让我反省一下!输出缺少最后一个元素中的最后2个空格。您的输出仅包含单个空格
flagged_line = "V. Divakar Botcha1,2, Mengdie Zhang1, Kuilong Li1,2, Hong Gu1,2, Zhonghui Huang1, Jianhui Cai3, Youming Lu1, Wenjie Yu3, and Xinke Liu1*  "    
words = ['V.', 'Divakar', 'Botcha', '1', ',', '2', ',', 'Mengdie', 'Zhang', '1', ',', 'Kuilong', 'Li', '1', ',', '2', ',', 'Hong', 'Gu', '1', ',', '2', ',', 'Zhonghui', 'Huang', '1', ',', 'Jianhui', 'Cai', '3', ',', 'Youming', 'Lu', '1', ',', 'Wenjie', 'Yu', '3', ',', 'and', 'Xinke', 'Liu', '1', '*']

print(['{0} '.format(x) if flagged_line.find(x + " ") != -1 else x for x in words ])
['V. ', 'Divakar ', 'Botcha', '1', ', ', '2', ', ', 'Mengdie ', 'Zhang', '1', ', ', 'Kuilong ', 'Li', '1', ', ', '2', ', ', 'Hong ', 'Gu', '1', ', ', '2', ', ', 'Zhonghui ', 'Huang', '1', ', ', 'Jianhui ', 'Cai', '3', ', ', 'Youming ', 'Lu', '1', ', ', 'Wenjie ', 'Yu', '3', ', ', 'and ', 'Xinke ', 'Liu', '1', '* ']