如何将字符串转换回单词?

时间:2019-07-18 22:43:34

标签: python-3.x

在过去的两个月左右的时间里,我一直在尝试学习Python,但实际上我现在才刚开始接触它,所以在此先感谢您的耐心和见识。

我正在一个项目中,我正在清理数据集中的名称。这意味着过滤出带有外来字符的应用程序的名称(即ord(character)>127。

但是,事实证明,这种方法删除了太多合法应用程序,因为其中的表情符号超出了该范围。

解决方法是最多允许一个外国字符。因此,这部分非常简单;我可以简单地扫描每个列表中名称的字符。我遇到的问题是告诉Python在循环中的哪个位置将名称添加到“清除的”列表中(应用程序名称的最终版本具有<= 1个错误。(要求在我的项目中实际上有所不同,但是在本示例中,我试图使其尽可能简单。)

为了稍微简化问题,我正在处理一个虚拟列表。我已经为你包括了。

在哪里添加代码,以便在每个名称的最终迭代之后,将该名称添加到名为cleanedNameList的列表中,以便仅追加带有<= 1个外来字符的名称?

当我尝试在列表之前附加一个“干净的”名称(名称中包含<= 1个外来字符)时,有时还会添加三个以上外来字符的名称。我认为部分原因是我不知道在哪里放置异常计数器。

nameList = ['うErick', 'とうきhine', 'Charliと']
cleanedNameList = []
exceptions = 0


for name in nameList:
  print('New name', name, 'being evaluated!')
  exceptions = 0
  for char in name:
    print(char, 'being evaluated')
    ascii_value = ord(char)
    if ascii_value < 127:
      continue
    elif ascii_value > 127:
      exceptions+=1
      print(exceptions, 'exception(s) added for', name)
#where would I add append.cleanedNamesList(name) ?

因此,TL; DR:如何扫描名称列表,并且一旦完成扫描列表,仅当它们具有<= 1个外来字符时,才将这些名称添加到新列表中。

1 个答案:

答案 0 :(得分:0)

def canAllow(s):
    return sum((1 for char in s if ord(char)>127), 0) <= 1

cleanList = [name for name in nameList if canAllow(name)]