И така, просто въвеждането на python flatten list в stack-overflow/google връща огромен брой дублиращи се резултати. Опитах всички от тях и никой не е приложим в този конкретен случай.
Получавам обратно набор от резултати от база данни от pyodbc, което ми дава структура от данни, която мога да принудя към списък със списъци. Първият елемент (първата колона) във всеки върнат ред е във формата "a.b.c"
. Бих искал да е "a", "b", "c"
. Първият ми инстинкт беше да се разделя на период, което и направих.
Преди:
[["a.b.c", "d", 1], ["e.f.g", "h", 2], ... ] # rows left out for brevity
След:
# unfortunately, split returns a list, which then gets nested
[[["a", "b", "c"], "d", 1], [["e", "f", "g"], "h", 2], ... ]
Но това, което бих искал да видя е:
[["a", "b", "c", "d", 1], ["e", "f", "g", "h", 2], ... ]
Опитах предишните решения за препълване на стека за изравняване на списък, но докато всички споменават вложени списъци, никой не казва как да изравним само вложените списъци.
Опитах:
from itertools import chain
for row in rows:
row = list(chain(row)) # python won't allow modifications in a loop
и
rows = [list(chain(row)) for row in rows]
Предполагам, че трябва да има начин, може би с добив, да се направи нещо като:
for row in rows:
row = row[0].append(row[1:]) # but this doesn't work either
Не знам как да променя вътрешните списъци в списък със списъци. Ако има по-добър начин от този, който съм опитвал досега, ще се радвам да го чуя. Благодаря ви предварително за помощта.
row
с нова стойност, това е < i>разрешено, но не постига нищо... - person jamylak   schedule 21.04.2013