我有一个带有外来字符的python列表,用一些unicode值表示:
python_list = ['to', 'shrink', u'\u7e2e\u3080', u'\u3061\u3062\u3080', 'chijimu', 'tizimu', 'tidimu', 'to', 'continue', u'\u7d9a\u304f', u'\u3064\u3065\u304f', 'tsuzuku', 'tuzuku', 'tuduku', u'\u30ed\u30fc\u30de\u5b57\uff08\u30ed\u30fc\u30de\u3058\uff09\u3068\u306f\u3001\u4eee\u540d\u6587\u5b57\u3092\u30e9\u30c6\u30f3\u6587\u5b57\u306b\u8ee2\u5199\u3059\u308b\u969b\u306e\u898f\u5247\u5168\u822c\uff08\u30ed\u30fc\u30de\u5b57\u8868\u8a18\u6cd5\uff09\u3001\u307e\u305f\u306f\u30e9\u30c6\u30f3\u6587\u5b57\u3067\u8868\u8a18\u3055\u308c\u305f\u65e5\u672c\u8a9e\uff08\u30ed\u30fc\u30de\u5b57\u3064\u3065\u308a\u306e\u65e5\u672c\u8a9e\uff09\u3092\u8868\u3059\u3002']
我需要删除所有项目' \ u7e2e'或其他类似的类型。如果列表中的项目甚至包含1个ascii字母或单词,则不应将其排除。例如:'China\u3062'
应包括在内。我提到了这个question,并意识到那些与大于128的值有关的东西。尝试了不同的方法,如下:
new_list = [item for item in python_list if ord(item) < 128]
但这会返回错误:
TypeError: ord() expected a character, but string of length 2 found
预期输出:
new_list = ['to', 'shrink','chijimu', 'tizimu', 'tidimu', 'to', 'continue','tsuzuku', 'tuzuku', 'tuduku']
我应该怎么做这个?
答案 0 :(得分:3)
如果您希望保留所有包含至少一个ascii字母的单词,则下面的代码将执行此操作
from string import ascii_letters, punctuation
python_list = ['to', 'shrink', u'\u7e2e\u3080', u'\u3061\u3062\u3080',
'chijimu','china,', 'tizimu', 'tidimu', 'to', 'continue',
u'\u7d9a\u304f', u'\u3064\u3065\u304f', 'tsuzuku', 'tuzuku', 'tuduku', u'china\u3061']
allowed = set(ascii_letters)
output = [word for word in python_list if any(letter in allowed for letter in word)]
print(output)
# ['to',
# 'shrink',
# 'chijimu',
# 'china,',
# 'tizimu',
# 'tidimu',
# 'to',
# 'continue'
# 'tsuzuku',
# 'tuzuku',
# 'tuduku',
# 'china?']
这将遍历每个单词的每个字母,如果allowed
中还包含单个字母,则会将该单词添加到您的output
列表中。
答案 1 :(得分:2)
你可以像这样接近,因为你想保留字符串并删除unicodes,
new_list = [item for item in python_list if isinstance(item, str)]
答案 2 :(得分:1)
以这种方式:
import string
python_list = ['to', 'shrink', u'\u7e2e\u3080', u'\u3061\u3062\u3080', 'chijimu', 'tizimu', 'tidimu', 'to', 'continue', u'\u7d9a\u304f', u'\u3064\u3065\u304f', 'tsuzuku', 'tuzuku', 'tuduku', u'\u30ed\u30fc\u30de\u5b57\uff08\u30ed\u30fc\u30de\u3058\uff09\u3068\u306f\u3001\u4eee\u540d\u6587\u5b57\u3092\u30e9\u30c6\u30f3\u6587\u5b57\u306b\u8ee2\u5199\u3059\u308b\u969b\u306e\u898f\u5247\u5168\u822c\uff08\u30ed\u30fc\u30de\u5b57\u8868\u8a18\u6cd5\uff09\u3001\u307e\u305f\u306f\u30e9\u30c6\u30f3\u6587\u5b57\u3067\u8868\u8a18\u3055\u308c\u305f\u65e5\u672c\u8a9e\uff08\u30ed\u30fc\u30de\u5b57\u3064\u3065\u308a\u306e\u65e5\u672c\u8a9e\uff09\u3092\u8868\u3059\u3002']
filtered = [s for s in python_list if all(c in string.ascii_letters for c in s)]
print(filtered)
输出:
['to', 'shrink', 'chijimu', 'tizimu', 'tidimu', 'to', 'continue', 'tsuzuku', 'tuzuku', 'tuduku']
答案 3 :(得分:1)
另一种方式:
new_list=[]
for word in python_list:
if word.encode('utf-8').decode('ascii','ignore') !='':
new_list.append(word)