0
votes

Python - Itérate sur toutes les paires d'articles consécutifs avec des lacunes

Étant donné une liste:

from itertools import combinations
def colocate(mylist,pairs=4,window=6):
    x = list(combinations(range(window),pairs))
    y = [z for z in x if z[0]==0]
    for item in y:
        print(item)


3 commentaires

"Toutes les paires de 3 articles consécutifs dans une fenêtre de 4" ajoutent complètement des chances avec la définition de "consécutive"


articles consécutifs avec des lacunes ? Peut-être que cela pourrait vous aider si vous pouviez prendre un pas en arrière et expliquer ce dont vous avez besoin cela.


Désolé si consécutif n'est pas le bon vocabulaire, je ne cherche pas des combinaisons. La commande compte, mais les articles ne doivent pas être parfaitement à côté de l'autre. Donc, c'est plus comme ordonné des permutations à l'intérieur d'une fenêtre.


3 Réponses :


2
votes

"combinaison" est un concept en mathématiques liés à votre question. Cela ne se soucie pas de "fenêtre de 4" cependant.

(1, 6, 4)
(1, 6, 9)
(1, 6, 2)
(1, 4, 9)
(1, 4, 2)
(1, 9, 2)
(6, 4, 9)
(6, 4, 2)
(6, 9, 2)
(4, 9, 2)


1 commentaires

Je veux compter le nombre de fois les éléments apparaissent proches les uns des autres, pas exactement côte à côte. Ainsi fournie une taille de fenêtre coulissante, trouvez toutes les paires «dans l'ordre» dans une taille de paire donnée.



1
votes

Cela devient assez proche. Il y aura des doublons produits, mais c'est ce que set (...) est pour finir ... devrait vous donner des idées de toute façon. XXX PRE> XXX


1 commentaires

C'est essentiellement exactement ce que j'étais au milieu de l'écriture. La fenêtre de fenêtre sélectionne l'entrée sur combinaisons , combinaisons obtient toutes les sélections non contiguës commandées à partir de chaque fenêtre. Vous pouvez conserver l'ordre de la première apparition pour chaque résultat en modifiant Set (...) à la liste (dict.fromkeys (...)) (Utiliser collections .Ordinoteddict.Fromkeys Avant Python 3.6), bien que cela suppose que vous ne voulez pas voir un dupliquer même s'il provient de Windows non liés.



1
votes

Un moyen assez simple de le faire est d'y réfléchir en termes d'index plutôt que de l'article de liste lui-même. Commencez par:

[[1, 6, 4], [1, 6, 9], [1, 4, 9], [6, 4, 9], [6, 4, 2], [6, 9, 2], [4, 9, 2]]


0 commentaires