【问题标题】:Adding punctuations to a list?在列表中添加标点符号?
【发布时间】:2014-12-03 16:12:17
【问题描述】:

我在标点符号上有一个小问题。

我的任务是检查文本中是否有任何重复的单词,如果列表中有任何重复的单词,我的工作是使用 .upper() 突出显示它们。

文本示例:我喜欢苹果,苹果是我所知道的最好的东西。

所以我提取了原始文本,将其从标点符号中删除,将所有单词转换为小写,然后拆分列表。 使用 for 循环,我将列表中的每个单词相互比较,我发现所有重复的单词,所有这些都放在一个新列表中。

示例(使用 for 循环后):我喜欢苹果 APPLES 是我所知道的最好的东西

因此,新列表现在与原始列表相似,但有一个主要例外,它缺少标点符号。

有没有办法在新列表中添加标点符号,如果它们是“应该是”(从旧列表位置)? 是否有某种在 python 中构建的方法可以做到这一点,还是我必须将两个列表与另一个 for 循环进行比较,然后将标点符号添加到新列表中?

NewList = [] # 创建一个空列表

for word in text: 
    if word not in NewList: 
        NewList.append(word)
    elif word in NewList: # 
        NewList.append(word.upper())
List2 = ' '.join(NewList)

上面的代码适用于较长的文本,这就是我一直用于突出显示重复单词的代码。 唯一的问题是新文件中不存在标点符号,这是我唯一的问题。

【问题讨论】:

  • 您可以在原始文本上使用string.replace,尽管使用'apples apples applesauce' 调用它会得到'APPLES APPLES APPLESauce'

标签: python list punctuation


【解决方案1】:

这是一个使用sub 方法和内置正则表达式模块回调的示例。 此解决方案尊重所有标点符号。

import re

txt = "I like,, ,apples, apples! is the .best. thing *I* know!!1"


def repl(match, stack):
    word = match.group(0)
    word_upper = word.upper()
    if word_upper in stack:
        return word_upper
    stack.add(word_upper)
    return word

def highlight(s):
    stack = set()
    return re.sub('\\b([a-zA-Z]+)\\b', lambda match: repl(match, stack), s)

print txt
print highlight(txt)

【讨论】:

  • @SoIsUrFace 你在使用 Python > 2.7 吗?有什么错误吗?
  • 奇怪,它现在起作用了。但这对我来说似乎很先进。我几乎不知道基本的。甚至没有听说过 re.subs 之类的东西
猜你喜欢
  • 2019-07-05
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多