avec deux listes en Python:
i = [0, 1, 2, 3, 4] j = [1, 4] all_lists = [i] for x in j: new_list = i.copy() new_list.insert(i.index(x), x) all_lists.append(new_list) print(all_lists) # [[0, 1, 2, 3, 4], [0, 1, 1, 2, 3, 4], [0, 1, 2, 3, 4, 4]] # still missing the [0, 1, 1, 2, 3, 4, 4] case
3 Réponses :
Vous avez raison d'essayer d'utiliser Vous avez dit que les listes peuvent contenir des éléments de n'importe quel type. Voici un exemple de faire la même chose à l'aide d'un nœud la différence de clé avec l'utilisation de classes est que deux classes de nœuds instanciées avec Le même nom n'est pas le même objet, donc iTertools code>. La fonction code> combinaisons code> est ce que vous voulez. Il suffit de boucler sur toutes les longueurs possibles (de 0 à len (j)):
de classe personnalisé code>: p>
i.index (x) code> dans votre clé de tri code> ne fonctionnera pas, car aucun élément de
j code> sont dans
i code> (même s'ils ont le même nom et sont "égaux"). Je peux expliquer cela plus si vous le souhaitez. P> p>
plage (len (j) + 1) code> est en réalité le bon choix car la combinaison zéro donnera la liste d'origine manquante
Au fait, j'ai eu l'impression j code> était une liste d'index et non de valeurs
Merci @jbernardo. Je ne pense pas que J est des index, mais peut-être que je me trompe.
@Peacefuljames - Merci pour cela - une bonne réponse. Toutes mes excuses pour modifier apparemment les critères et ne plus être plus clairs dans la question initiale - L'ordre de I est important car les valeurs pouvaient être n'importe quel type de données empêchant d'utiliser trié code>. J'ai mis à jour la question.
Ça devrait être facile, il suffit de passer une "fonction clé" à trié code> basé sur
i code> ou
a code> ou autre que vous appelez la super-liste . Je vais mettre à jour ma réponse.
Avez-vous vu des «fonctions de Lambda» avant? Est-ce que ça a du sens ce que je fais?
@Peacefuljames - excellent fonctionne parfaitement merci. Oui Re The Lambda - Il est utilisé pour trier les sorties à l'aide de l'ordre d'index de la liste d'origine, très agréable,
Vous avez dit que les listes peuvent être de n'importe quel type, je vais donc fournir un autre exemple en utilisant un type personnalisé. Si cela répond à votre question, veuillez l'accepter.
modifié pour refléter que éditer
en utilisant j code> est une liste des valeurs à dupliquer
insérer code> est plus efficace que ce que j'avais avant p> p>
@Jbernando - désolé de ne pas avoir plus clairement plus clair que le J était un sous-ensemble des valeurs de i. J'ai ajouté un exemple de chaîne.
@geographika ok donc je l'ai réparé pour récupérer les index des valeurs à la place
Fonctionne parfaitement (et aidé à corriger ma sortie manuelle!)
Est-ce ce que vous recherchez?
Est
i code> garanti être trié? Et
j code>? Les deux ne contiendront toujours aucun doublon? Par exemple, savons-nous que nous ne pouvons jamais avoir
i = [1, 2, 2,3] code>?
i code> ne contiendra jamais de duplicats, mais il n'y a pas de tri, j'ai utilisé des entiers pour l'exemple, je pourrais aussi être
["D", "B", "A" > et
j code>
["b"] code>
Pouvez-vous expliquer pourquoi votre exemple a toujours
i code> entièrement contenu mais pas
j code>?
@Dawg - C'est l'une des combinaisons requises. Il serait bien d'ajouter simplement
i code> à la sortie au début ou à la fin comme une opération distincte.
@geographika vient de commencer par
all_lists = [i, liste (triée (i + j))] code> alors vous pouvez faire
pour élément dans j: all_lists.append (Liste (triée (I + [ article])))) code>? (Oui. Ajoutez également le cas code> i + j code> manuellement, puis effectuez la combinaison avec les éléments de la liste
j code>)
Sur votre 2e exemple, vous avez
dupliqué c, d code> deux fois