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
Freigeben: 2024-02-22 12:43:11
nach vorne
680 Leute haben es durchsucht

如何有效地打乱 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)
Nach dem Login kopieren

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')]
Nach dem Login kopieren

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))
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage