2015-07-31 4 views
1

У меня есть файл данных с некоторых целых чиселСортировка 2d массив на основе первого столбца

2 8 
6 7 3 
4 
1 3 4 2 

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

1 3 4 2 
2 8 
4 
6 7 3 

Следующие утверждения прочитать файл и сохранить каждую строку в массиве

fs = open('test.txt') 
lines = [line for line in fs if line.strip()] 

Теперь я хочу использовать sorted с соответствующим ключом. Но не знаю, как его использовать. Функция лямбда четко разъяснены here, но проблемы являются

1) Список параметров должно быть что-то вроде for row in lines

2) Блок кода должен быть что-то вроде row[0]

Но этот синтаксис неправильно, и я знайте это!

sorted(lines, key=lambda for row in lines : row[0]) 

ответ

3

Вы должны разделить ваши строки затем использовать отсортированный и не то, что лучше, чтобы отсортировать строки на основе целочисленных значений чисел, так как для цифр длиной более, что жгут будет сравнить неправильно (из-за лексически сортировки):

lines = sorted([line.split() for line in fs if line.strip()],key=lambda x :int(x[0])) 

Или использовать operator.itemgetter как ключ, который выполняет лучше в этом случае:

from operatior import itemgetter 
lines = sorted([line.split() for line in fs if line.strip()],key=int(itemgetter(0))) 

И вы можете присоедините линии:

new_lines = [' '.join(i) for i in lines] 
+0

Как python идентифицирует, что 'x' является' line.split() '? – mahmood

+0

'x' - это параметр, определяемый анонимной' lambda'. 'myfunc = lambda x:' примерно эквивалентен 'def myfunc (x):'. – TigerhawkT3

+1

@mahmood, так как 'lambda' - это функция, которая принимает аргумент' x'. Python передает итерируемый аргумент в 'sorted' функцию ключевой функции. – Kasramvd

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