0

我正在尝试将我从学校成绩站点获得的这些列表从 Unicode 更改为 ASCII。

列表如下所示:

x = grades[1]
print x        #Input

[u'B', u'84']  #Output

但我不希望你在那里。我试过用

a.encode('ascii','ignore')

但我明白了

Traceback (most recent call last):
  File "C:\Python27\Project.py", line 33, in <module>
    L1.encode('ascii','ignore')
AttributeError: 'list' object has no attribute 'encode'

有没有办法做到这一点?

4

2 回答 2

4

问题是您正在尝试编码一个充满字符串的列表,而不是一个字符串。您不能在字符串列表上调用字符串方法;你必须在每个字符串上调用它们。

执行此操作的 Pythonic 方法是使用列表推导

>>> x = [u'B', u'84']
>>> y = [s.encode('ascii', 'ignore') for s in x]
>>> y
['B', '84']

在幕后,这基本上与以下内容相同:

>>> x = [u'B', u'84']
>>> y = []
>>> for s in x:
...     y.append(s.encode('ascii', 'ignore'))
>>> y
['B', '84']

但它更简洁,更难出错,并且(一旦你掌握了列表推导的基本概念)更容易阅读。

它也与以下任一相同:

y = map(lambda s: s.encode('ascii', 'ignore'), x)
y = map(partial(unicode.encode, encoding='ascii', errors='ignore'), x)

通常,如果您需要编写 alambda或非平凡partial的 ,列表推导式将比map调用更具可读性。但是在您有一个可以使用的功能的情况下,map通常会更好。

于 2013-05-06T22:10:38.163 回答
3

您可以简单地将 str() 函数应用于列表的每个元素。在 python 2 中, str 对象是 ASCII 编码的。例如(在 python shell 中):

>>> x = [u'B', u'84']
>>> x
[u'B', u'84']
>>> x[0]
u'B'
>>> x[1]
u'84'
>>> str(x[0])
'B'
>>> str(x[1])
'84'

如果需要列表,您可以使用列表理解:

>>> y = [str(i) for i in x] 
>>> y
['B', '84']

或地图功能:

>>> z = map(str, x)
>>> z
['B', '84']
>>>

希望这就是你要找的。问候!

于 2013-05-06T22:22:53.423 回答