mise à jour: la liste est remplie de chaînes que j'ai édité la liste pour afficher ce
J'ai 3 différentes liste tels que P>
Sorted_list = [('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')
3 Réponses :
Vous pouvez faire:
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')]
J'ai oublié d'inlcucer dans le code d'origine que la liste est remplie de chaînes. J'ai mis à jour le poste pour montrer ceci. J'ai essayé votre méthode, puis imprimé la valeur des tuples et la deuxième ligne du code. Ils ont renvoyé
J'ai mis à jour ma réponse pour prendre en compte le fait que vous avez des chaînes.
Lorsque j'imprimer la liste, j'obtiens toujours
Je suppose que c'est due à la version Python ... quel retour tuples code> en premier? Une liste? Essayez d'envelopper le zip avec la liste () code>.
Oui dans Python 3 Zip renvoie un itérateur.
Essayez ceci,
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')]
Lorsque j'imprime le résultat, il retourne
@JStuff, puisque vous utilisez python3, ajoutez list code> à l'avant de zip (...) code>. Zip code> dans Python3 retourne un itérateur. Vérifiez ma réponse modifiée.
Parfait, c'est exactement ce que je cherchais! Question rapide cependant. Dans les données que je travaille avec elle a des décimales au deuxième décimal, de sorte que 1,10, 1,11, etc. et elle triée ceci comme 1, 1.1, 1.10, 1.1, etc. Y a-t-il un moyen de dire à Python de le trier 1,1, 1.2, ..., 1.9, 1.10, etc.?
@Jstuff, bonne question. Diviser un nombre en parties entier et décimales, utilisez zip code> pour les emballer, triez-les et intégrez-les.
Ours avec moi, je suis toujours nouveau à Python. J'ai essayé de faire l1_float = [float (i) pour I dans L1], mais il chute le zéro de 1,10 de sorte qu'il a 1, 1,1, 1,1, 1,2 au lieu de 1, 1.1, 1.2, 1.10.0 y a-t-il un Un meilleur moyen de le faire pour que cela garde les zéros traînants? Aussi, pourquoi flottez-vous la valeur que vous transmettez en Lambda?
@Jstuff, je viens de poster une nouvelle question, Comment puis-je trier une liste de numéros de section dans Python? .
Laissez-nous Continuez cette discussion dans le chat .
Mon approche. Liste compréhension et pas besoin d'importer des modules. Je pense que c'est rapide, et c'est très simple.
Edit: J'ai ajouté une approche non traitée et une approche triée. P>
#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']]
Ce n'est pas le résultat souhaité de OP puisque vous triez la liste de manière indépendante.
@sparkandshine ah, je vois qu'il a dit qu'il voulait une forme où il pourrait être trié par la suite. Merci pour les commentaires. Je vais éditer ma réponse.
Peut-être que je n'ai pas fait cela clair, je veux seulement trier la section de la liste et que le reste des deux autres liste doit être trié dans le même ordre de la section de la liste après le tri. Par exemple, si, après la section de tri, les premiers indices ont changé à 2, 4, 1. Les deux autres liste devraient modifier leurs indices à 2, 4, 1.