2014-02-02 2 views
1

У меня есть большой список, состоящий из нескольких списков произвольной длины. Я хочу сравнить каждую длину списка и создать новые списки равных размеров. Например,Python: сравнить списки списка по длине и создать новые списки равных размеров

biglist = [['x','y','z'],['a','b'],['d','f','g'],...,['r','e','w','q','t','u','i']] 
expected_list= [['a','b'],[['x','y','z'],['d','f','g']],....,['r','e','w','q','t','u','i']] 

Я новичок в Python. может ли кто-нибудь предложить мне менее дорогостоящий метод для выполнения вышеуказанного процесса. Спасибо заранее.

+0

Не было больше смысла иметь '[[[ 'а', 'б']], [[ 'х', 'у', 'г '], [' d ',' f ', g']], ...] 'и т. д.? Прямо сейчас ваши списки длины-2 не находятся в отдельном списке, в отличие от списков длины-3. Это похоже на то, что у вас есть '['ab', ['xyz', 'dfg']]', когда было бы более последовательным иметь '[['ab'], ['xyz', 'dfg']]'. – DSM

+0

есть. я отредактирую. – Manoj

+0

Вы пытаетесь объединить списки каждого заданного размера? –

ответ

2

Могу ли я предложить, используя itertools GroupBy функцию?

import itertools 


biglist = [['x','y','z'],['a','b'],['d','f','g'],['r','e','w','q','t','u','i']] 

print(list(list(i[1]) for i in itertools.groupby(sorted(biglist, key=len), len))) 

Какие выходы

[[['a', 'b']], [['x', 'y', 'z'], ['d', 'f', 'g']], [['r', 'e', 'w', 'q', 't', 'u', 'i']]] 
+0

Это то, что я хочу. Спасибо! :) – Manoj

+0

плюс один для удовольствия. : D –

2

Похоже, что вы хотите groupby список по его элемент len с:

>>> biglist = [['x', 'y', 'z'], ['a', 'b'], ['d', 'f', 'g'], ['r', 'e', 'w', 'q', 't', 'u', 'i']] 
>>> expected_list = [list(b) for a, b in itertools.groupby(sorted(biglist, key=len), len)] 
>>> expected_list 
[[['a', 'b']], [['x', 'y', 'z'], ['d', 'f', 'g']], [['r', 'e', 'w', 'q', 't', 'u', 'i']]] 
+0

Спасибо за быстрый ответ. хм .. не только сортировка. Я хочу иметь новые списки списков одинаковых размеров. например, 1-й список содержит все списки, в которых есть 1 элемент ... аналогично 2-й список содержит все списки из 2-х элементов. Извините, если это глупый вопрос. – Manoj

+0

OHH, извините, я не заметил дополнительных скобок в вашем примере. отредактировал – mhlester

+1

@ManojFernando, ну, я закончил свое редактирование, но похоже, что Aaron Hall имел его до того, как я закончил, поэтому он заслуживает принятия – mhlester

Смежные вопросы