2016-01-08 13 views
6

habe ich eine Liste von Punkten mit ihren Koordinaten, wie folgt aussehen:Wählen Sie drei verschiedene Werte aus der Liste in Python

[(0,1),(2,3),(7,-1) and so on.] 

Was ist der Pythonic Art und Weise über sie zu durchlaufen und drei verschiedene jedes Mal wählen? Ich kann es nicht einfachere Lösung finden als die Verwendung von drei for Schleifen wie folgt aus:

for point1 in a: 
    for point2 in a: 
     if not point1 == point2: 
     for point3 in a: 
      if not point1 == point3 and not point2 == point3: 

Also um Hilfe ich frage.

+0

gibt es immer 'itertools', ein Modul über Listen für Iterieren – njzk2

+0

oder, wenn Sie es tun wollen Ihr Selbst, "Bereich" würde für einen besseren Vergleich – njzk2

+0

Machen Sie einen Blick auf ['itertools.combinations'] (https://docs.python.org/3.5/library/itertools.html#itertools.communications) und [' itertools.permutations '] (https://docs.python.org/3.5/library/itertools.html#itertools.permutations). –

Antwort

6

können Sie itertools.combinations verwenden:

from itertools import combinations 

for point1, point2, point3 in combinations(points, 3): 
    ... 
+1

Vielleicht 'für Punkt1, Punkt2, Punkt3 in Kombinationen (Punkte, 3): ...' wäre klarer? –

+0

@MarkDickinson In der Tat, danke. – Delgan

7
import random 

lst = [(0, 1), (2, 3), (7, -1), (1, 2), (4, 5)] 

random.sample(lst, 3) 

Dies wird Ihnen nur 3 Punkte zufällig aus der Liste ausgewählt geben. Es scheint, dass Sie etwas anderes wollen. Könntest Du das erläutern?

+1

Ich denke nicht, dass es das ist, was OP erwartet, da er sagte "iteriere über sie und wähle jedes Mal drei verschiedene aus". – Delgan

+0

Sie haben Recht, ich habe die Frage nicht verstanden. Ich denke, es hängt davon ab, was sie mit der Ausgabe tun wollen – jgritty

+0

@Delgan: Blick auf OP-Beispielcode, es sieht wirklich wie es _is_ was er will. –

2

Verwenden Sie eine set.

Nehmen wir an, Ihr ursprünglicher Koordinatensatz ist eindeutig.

>> uniquechoices=[(0,1),(2,3),(7,-1) and so on.] 

einen Satz selected genannt, geben Sie bitte, bis es 3 Werte hat sagen, zufällige Auswahl mit

>> from random import randint 
>> selected=set([]) 
>> while len(selected) < 3: selected.add(uniquechoices[randomint(0,len(uniquechoices))]) 
Verwandte Themen