Python, кодировать строки в списке списков - PullRequest
0 голосов
/ 26 декабря 2018

Я использую 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

1 Ответ

0 голосов
/ 26 декабря 2018

Поняв, что ваш первый код на самом деле не опечатка, а логическая ошибка, позвольте мне обобщить мои комментарии здесь.В ваших подходах есть две проблемы (обе они связаны):

Проблема с первым кодом : в настоящее время вы возвращаете только первый подсписок, потому что вы поместили возврат в свой цикл for.Ваш входной список содержит подсписки, поэтому вам нужно циклически их перебирать.Один из способов - сделать это так же, как во втором подходе.Другой способ заключается в использовании списочных представлений.Ниже приведен способ понимания списка, где i будет перебирать подсписки, а x перебирает элементы вашего подсписка i.

def testEncode(a):
    return [[x.encode('utf-8') for x in i] for i in a]

Проблема со вторым кодом : В этой вашей попытке вы в основном решили проблему игнорирования подсписков , но вы забыли поместить свой return оператор вне в цикл 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
...