Ошибка TypeEr при выравнивании списка списков строкового типа - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть набор данных, который выглядит следующим образом:

ds = [['' North ',' Raw ',' Tree '], [' Saw ',' Raw ',' Apple '], [ 'Saw', 'Apple'], ['Gum', 'Saw'], ......]

Набор данных имеет 211945 значений. Я импортировал этот набор данных в Jupyter и попытался запустить приведенный ниже код для создания этого списка списков в виде единого списка.

Код:

     list_1 = []
     for sublist in ds:
       for val in sublist:
           list_1.append(val)

Я получил ошибку:

  1 list_1 = []
  2 for sublist in ds:
  3     for val in sublist: <---
  4         list_1.append(val)

TypeError: объект 'float' не повторяется

Ожидаемый результат:

list_1 = ['North', 'Raw', 'Tree', 'Saw' 'Raw', 'Яблоко', 'пила', 'Яблоко', 'камеди', 'пила', ......]

Ответы [ 3 ]

0 голосов
/ 03 апреля 2020

Использование itertools.chain() - очень распространенная идиома для этого, но если вы предпочитаете списки, это может быть сделано с одним вкладышем

flattened = [j for i in lsts for j in i]

, который, возможно, легче читать .

0 голосов
/ 03 апреля 2020
new_list =[]
for x in ds:
   try:
      new_list.extend(x)
   except:
      new_list.extend([x])

Мне кажется, в ваших списках есть элементы, которых нет в списке. Например, 'ds' может быть как [['a', 'b'], ['c', 'd'], 'e', ​​['f', 'g'] ....] то есть смесь списков и одиночных элементов. Вышеприведенный код должен работать, так как каждый отдельный элемент будет рассматриваться как список в случае «исключая», так как & когда возникает ошибка в случае «попытаться»

0 голосов
/ 03 апреля 2020

Вы можете использовать itertools.chain https://docs.python.org/3/library/itertools.html. Я думаю, это идеально подходит для вашего случая.

import itertools


ds = [['N','R','T'],['S','R','A'],['S','A']]

print(list(itertools.chain(*ds)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...