2011-12-19 1 views
2

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

line = [x.split(", ") for x in lineList]

В то же время я хотел бы, чтобы удалить хвосты и ведущие символы элементов (.rstrip('"')/.lstrip('"').

Но объект 'list' не имеет атрибута 'rstrip'. Есть ли способ достичь этого в понимании или мне нужно идти за циклом?

Заранее спасибо за любые советы, Lars

+0

если вы пытаетесь разобрать список JSon затем использовать 'json.loads()' вместо или, если это string list 'repr()', тогда вместо этого используйте 'ast.literal_eval()'. – jfs

ответ

3

Если вы хотите удалить как ведущие, так и трейлинг-кавычки, почему бы не использовать strip() напрямую? Кроме того, если вы хотите сгладить список списков:

line = sum([[y.strip('"') for y in x.split(", ")] for x in lineList], []) 
+0

Привет, ребята, спасибо за ваши ответы. Именно то, что я искал, но не мог придумать. Ура! – LarsVegas

+0

@LarsVegas: ['sum (nested_list, [])' является неэффективным] (http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in -python # comment13288147_952946), и это не самый читаемый способ [сгладить мелкий список в Python] (http://stackoverflow.com/q/952914/4279) – jfs

4

Попробуйте что-то вроде этого:

line = [[y.rstrip('"') for y in x.split(", ")] for x in lineList] 

с двумя списковых внутри.

1

Лично я считаю, что понимание вложенного списка сложнее читать. Почему бы не дать этой работе другой функции? Возможно, это заслуживает лучшего названия, но:

def groom_line(l): 
    return [elem.strip('"') for elem in l.split(",")] 

и в приложении,

return [groom_line(l) for l in linelist]