Если я правильно понимаю ваш вопрос, вы, по сути, хотите выбрать индексы из списка списков и создать новые списки из этого выбора.
Выбор индексов из списка списков довольно прост, особенно если у вас есть фиксированное количество выборов:
parts = [(item[pos1], item[pos2]) for item in list]
Создать новые списки из этих выборов также довольно просто, используя встроенную функцию zip () :
separated = zip(*parts)
Вы можете дополнительно сократить использование памяти, используя выражение генератора вместо понимания списка в конечной функции:
def f( list, pos1, pos2 ):
partsgen = ((item[pos1], item[pos2]) for item in list)
return zip(*partsgen)
Вот как это выглядит в действии:
>>> f( [['ignore', 'a', 1], ['ignore', 'b', 2],['ignore', 'c', 3]], 1, 2 )
[('a', 'b', 'c'), (1, 2, 3)]
Обновление: Перечитав вопрос и комментарии, я понимаю, что это немного упрощено. Тем не менее, общая идея должна работать, когда вы заменяете pos1 и pos2 для соответствующей индексации во вложенном массиве.