Update: The list are filled with strings I edited the list to show this
I have 3 different list such as
Section = [(\'1\', \'1.1\', \'1.2\'), (\'1\',
My approach. List comprehension and no need to import modules. I think its fast, and its very simple.
EDIT: I've added an unsorted approach and a sorted approach.
#Unsorted
newList =[
[item for sublist in Section for item in sublist],
[item for sublist in Page for item in sublist],
[item for sublist in Titles for item in sublist]
]
print newList
#Output
#[[1, 1.1, 1.2, 1, 2, 2.2, 3, 1, 1.2, 3.2, 3.5],
# [1, 1, 3, 1, 2, 2, 2, 1, 2, 3, 5],
# ['General', 'Info', 'Titles', 'More', 'Info', 'Section', 'Here', 'Another', 'List', 'Of', 'Strings']]
#Sort first two lists afterwards, if desired
for i in range(2):
newList[i].sort()
print newList
#Output
#[[1, 1, 1, 1.1, 1.2, 1.2, 2, 2.2, 3, 3.2, 3.5],
# [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 5],
# ['General', 'Info', 'Titles', 'More', 'Info', 'Section', 'Here', 'Another', 'List', 'Of', 'Strings']]
Try this,
Section = [('1', '1.1', '1.2'), ('1', '2', '2.2', '3'), ('1', '1.2', '3.2', '3.5')]
Page = [('1', '1', '3'), ('1', '2', '2', '2'), ('1', '2', '3', '5')]
Titles = [('General', 'Info', 'Titles'), ('More', 'Info', 'Section', 'Here'), ('Another', 'List', 'Of', 'Strings')]
# Flat a list of tuples into a list
l1 = [item for sublist in Section for item in sublist]
l2 = [item for sublist in Page for item in sublist]
l3 = [item for sublist in Titles for item in sublist]
# Python2, `zip` returns a list of tuples
#result = zip(*sorted(zip(l1, l2, l3), key=lambda x:float(x[0])))
# Python3, `zip` returns an iterator of tuples
result = list(zip(*sorted(zip(l1, l2, l3), key=lambda x:float(x[0]))))
print(result)
# Output
[ ('1', '1', '1', '1.1', '1.2', '1.2', '2', '2.2', '3', '3.2', '3.5'),
('1', '1', '1', '1', '3', '2', '2', '2', '2', '3', '5'),
('General', 'More', 'Another', 'Info', 'Titles', 'List', 'Info', 'Section', 'Here', 'Of', 'Strings')]
You can do:
from itertools import chain
tuples = zip(map(float, list(chain(*Section))),
list(chain(*Page)),
list(chain(*Title)))
zip(*sorted(tuples, key=lambda x: x[0]))
Out[232]:
[(1.0, 1.0, 1.0, 1.1, 1.2, 1.2, 2.0, 2.2, 3.0, 3.2, 3.5),
('1', '1', '1', '1', '3', '2', '2', '2', '2', '3', '5'),
('General',
'More',
'Another',
'Info',
'Titles',
'List',
'Info',
'Section',
'Here',
'Of',
'Strings')]
Here you first unnest your three list (what list(chain(*L))
does) and pack them in tuples with zip
. Tip "tuples" to see how it looks.
Then on the second line of code you can apply the sorting according to the element of the tuple you want. And you unpack the result.