是使用Python 2.7的。
我有一个列表列表,如:
testList2 = [[u'462', u'San Germ\xe1n, PR'],[u'461', u'40341']]
我想对列表列表中的字符串进行编码,例如:
encodedList = [['462', 'San Germ\xc3\xa1n, PR'],['461', '40341']]
试图编写一个函数来做到这一点(没有用):
def testEncode(a):
for list in a:
return [x.encode('utf-8') for x in list]
我认为,要使该功能正常工作,它需要将每个编码列表附加到先前的编码列表中,以生成列表的编码列表。不确定如何执行此操作。如果有人可以解释如何编辑功能来做到这一点,那就太好了。
我尝试了以下同样无效的方法
def testEncode(a):
b = []
for list in a:
b.append([x.encode('utf-8') for x in list])
return b
答案 0 :(得分:1)
已经意识到您的第一个代码实际上不是印刷错误,而是逻辑错误,让我在这里总结一下我的评论。您的方法有两个问题(都是相关的):
第一个代码的问题:您当前仅返回第一个子列表,因为您将返回值放入了for循环中。您的输入列表包含子列表,因此您需要以嵌套方式遍历它们。一种方法是像在第二种方法中一样进行操作。另一种方法是使用列表推导。以下是列表理解方法,其中i
将遍历子列表,而x
将遍历子列表i
的元素。
def testEncode(a):
return [[x.encode('utf-8') for x in i] for i in a]
第二个代码的问题:在您的这种尝试中,您基本上已经解决了忽略子列表的问题,但却忘记了放置return
语句 outside for循环。因此,在嵌套的for循环遍历所有子列表之前,请过早返回结果。因此,您只会看到第一个子列表已修改。
def testEncode(a):
b = []
for list in a:
b.append([x.encode('utf-8') for x in list])
return b # <-- Moved outside the for loop now