Trouver l'indice de la valeur min ou max en Python

J'ai une structure de la forme:

>>> items
[([[0, 1], [2, 20]], 'zz', ''), ([[1, 3], [5, 29], [50, 500]], 'a', 'b')]

Le premier élément de chaque n-uplet est une liste de plages, et je veux faire un générateur qui me donne les plages dans l'ordre croissant basé sur l'indice de départ.

Depuis la plage-les listes sont déjà triés en fonction de leur indice de départ de cette opération est simple: c'est juste un classement de fusion. Je suis l'espoir de le faire avec une bonne efficacité de calcul, donc je pense qu'une bonne façon de faire implicitement le suivi de l'état de mon fusion est tout simplement de la pop le front de la liste de tuple qui a le plus petit indice de départ dans sa gamme de la liste.

Je peux utiliser min() pour obtenir [0, 1] qui est le premier que je veux, mais comment puis-je obtenir l'index de celui-ci?

J'ai ceci:

[ min (items[i][0]) for i in range(len(items)) ]

qui me donne le premier élément de chaque liste, que je peux ensuite min() au cours d'une certaine façon, mais il échoue une fois que la liste est vide, et aussi il n'est pas clair comment faire pour obtenir l'index à utiliser pop() avec sans regarder en arrière dans la liste.

Pour résumer: vous Souhaitez construire générateur qui renvoie pour moi:

([0,1], 'zz', '')
([1,3], 'a', 'b')
([2,20], 'zz', '')
([5,29], 'a', 'b')
([50,500], 'a', 'b')

Ou même de manière plus efficace, j'ai seulement besoin de ces données:

[0, 1, 0, 1, 1]

(les indices des tuples, je veux profiter de l'avant de l'élément de l')

  • J'ai écrit un mergeiter fonction pour une réponse précédente; j'ajoute des indices avec enumerate().
  • Étant assez vert avec Python, j'ai eu quelques difficultés grokking que mergeiter fonction de la vôtre au premier abord. Mais, après avoir examiné ces autres réponses, de toute évidence, c'est le bon type d'approche. Et pourtant c'est la seule qui n'est pas affiché comme une réponse...
InformationsquelleAutor Steven Lu | 2013-06-05