Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man die von itertools.combinations() generierten Tupel effizient verschlüsseln?

Wie kann man die von itertools.combinations() generierten Tupel effizient verschlüsseln?

PHPz
PHPznach vorne
2024-02-22 12:43:11676Durchsuche

如何有效地打乱 itertools.combinations() 生成的元组?

Frageninhalt

Ich verwende itertools.combinations(), um eine Liste von Tupeln mit zwei Elementen basierend auf einer Liste sich nicht wiederholender Elemente zu generieren. Dann mische ich die resultierende Liste. Der Inhalt des Tupels selbst ist jedoch chronologisch organisiert. Führen Sie beispielsweise den folgenden Code aus:

import random
import itertools
items = ["a","b","c","d","e"]
item_combos = list(itertools.combinations(items, 2))
random.shuffle(item_combos)
print(item_combos)

Ausgabe:

['a', 'b', 'c', 'd', 'e']
[('b', 'd'), ('a', 'e'), ('b', 'c'), ('a', 'd'), ('a', 'b'), ('a', 'c'), ('c', 'e'), ('c', 'd'), ('b', 'e'), ('d', 'e')]

Zeichen werden im Tupel nach dem Zeitpunkt sortiert, zu dem sie in der Eingabeliste erschienen (nicht alphabetisch, die Eingabeliste ist zufällig nur alphabetisch sortiert. Das Mischen der Liste löst das Problem nicht, es verbirgt es nur). „c“ erscheint immer links von „d“ und „a“ erscheint immer links von allem anderen.

Meine Lösung bestand darin, einfach alle Tupel durch verschlüsselte Tupel zu ersetzen (siehe unten). Dies funktioniert, erweist sich jedoch als sehr langsam, insbesondere bei größeren Listen.

for i in range(len(item_combos)):
    item_combos[i] = tuple(random.sample(item_combos[i], 2))

Gibt es eine schnellere Möglichkeit, eine ähnliche Ausgabe zu erzeugen?


Richtige Antwort


Das Auswählen zufälliger Tupel zum Umkehren, anstatt jedes Tupel zu mischen, funktioniert viel schneller. Dies hat das gleiche Ergebnis, da jedes Tupel in item_combos nur zwei Elemente enthält.

Neuer Tupel-„Scrambling“-Code:

for i in range(len(item_combos)):
    if random.random()<.5:
        item_combos[i] = item_combos[i][::-1]

Das obige ist der detaillierte Inhalt vonWie kann man die von itertools.combinations() generierten Tupel effizient verschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen