2012-05-04 2 views

ответ

8
>>> b=[['1','2','3','4','5'],['11','12','13','14','15'],['6','7','8','9','10']] 
>>> sorted(int(j) for i in b for j in i) 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
+0

1UP: Оптимальное решение, не требуется импорт. – MattH

+1

My +1. Единственное, что мне не нравится, это использовать идентификатор 'l';) – pepr

+0

спасибо работал отлично! –

3
import itertools 
c = sorted(int(a) for a in itertools.chain(*b)) 

или, как @jamylak правильно заметил:

import itertools 
c = sorted(int(a) for a in itertools.chain.from_iterable(b)) 

использованием map немного быстрее (и быстрее, чем двойной список понимание в ответе @ jamylak):

import itertools 
c = sorted(map(int, itertools.chain.from_iterable(b))) 
+0

О, черт. Я забыл о 'itertools'. ;) –

+1

Почему никто не любит 'chain.from_iterable'? – jamylak

+0

@eumiro это фазер, чем ответ Джамилака? –

2

Другой вариант

>>> from itertools import chain 
>>> b=[['1','2','3','4','5'],['11','12','13','14','15'],['6','7','8','9','10']] 
>>> sorted(chain(*b),key=int) 
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'] 

и в случае, если вы хотите список целых чисел, то

>>> sorted(map(int,chain(*b))) 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

Сравнение скорости

>>> t1=Timer(stmt='sorted(map(int,chain(*b)))',setup='from __main__ import b;from itertools import chain') 
>>> t2=Timer(stmt='sorted(int(i) for l in b for i in l)',setup='from __main__ import b') 
>>> t3=Timer(stmt='sorted(int(a) for a in chain(*b))',setup='from __main__ import b;from itertools import chain') 
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000) 
33.23 usec/pass 
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000) 
35.60 usec/pass 
>>> print "%.2f usec/pass" % (1000000 * t3.timeit(number=100000)/100000) 
36.19 usec/pass 
+1

OP хотел получить список объектов 'int'. – MattH

+0

@MattH: Извините, я пропустил эту часть. – Abhijit

+0

, но вы также импортируете itertools для t1 и t3. –

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