在过去的两个月左右的时间里,我一直在尝试学习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个外来字符时,才将这些名称添加到新列表中。
答案 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)]