2017-05-19 6 views
-3

ich brauche zufällig zwei Instanzen wählen aus einer Klasse Knoten:Python - wie nach dem Zufallsprinzip Instanzen von einer Klasse wählen

Class node:

Klasse Knoten:

def __init__(self, parent = None, length_to_parent = None, name = None, left = None, right = None, internal = 1, root = 0): 
    self.parent = parent # parent node 
    self.length_to_parent = length_to_parent # length to the parent node 
    self.name = name # name of the node (to-be-defined name if external node(leaf), None if internal node) 
    self.left = left # left child 
    self.right = right # right child 
    self.internal = internal # indicate if the node is an internal node 
    self.root = root 

Ich denke an der Speicherung Alle Instanzen von Knoten in einer Liste verwenden dann random.choose oder random.shuffle, um zwei Knoten aus der Liste zufällig auszuwählen.

Aber ich weiß nicht, wie man Instanzen in einer Liste speichert, aber ... Jedermann bitte helfen !!! Danke

+0

Wir fangen alle irgendwo an, also werde ich Ihnen bei einigen grundlegenden Richtlinien helfen, um Hilfe zu bekommen. 1) Veröffentlichen Sie Codeschnipsel (eingerückt mit Strg + K), Screenshots helfen nicht. 2) Beschreibe, was du getan hast. 3) Erwartete Ergebnisse werden helfen. – Wboy

+0

Sie können Objekte einfach in einer Liste behalten: '[Ihr_Objekt() für _ im Bereich (how_many_you_want)]' und dann random.select aus dieser Liste auswählen. – dawg

Antwort

1

Sie können Instanzen auf einer Liste wie alles andere speichern.

import random 
lst = [] 
new_node = node(parent,length... etc) 

lst.append(new_node) 

# assuming you have > 2 nodes: 
# pick two random nodes, store in another lst 
random_selection = [random.choice(lst) for x in range(2)] 

Gab es etwas Bestimmtes, das Sie fragen?

+0

Yup bemerkt, danke @abccd – Wboy

+0

Yup, das ist besser, upvoted, aber um zu verbessern, können Sie auch ein weiteres Beispiel hinzufügen 'random.choices (lst, k = 2)' und angeben, es ist nur für Python 3.6 :) – abccd

+0

@abccd Das ist wahr ! Danke für das Teilen deines Wissens :) – Wboy

0

Ich gehe davon aus, dass dieser "Knoten" von Ihnen Teil eines binären Baumes ist. In diesem Fall können Sie einfach durch Ihren Baum iterieren und Referenzen in einer laufenden Liste speichern.

Etwas entlang der Linien von:

arr = [] 
# Perform tree traversal. 
traverse(root_node, arr) 
# Now, do something here with the list! 

def traverse(node, arr): 
    # Traverse the left subtree 
    if(node.left is not None): 
     traverse(node.left, arr) 
    # Traverse the right subtree 
    if(node.right is not None): 
     traverse(node.right, arr) 
    # Append the node! It can be appended like any other item in the list. 
    arr.append(node) 

sollten Sie in der Lage sein Knoten anhängen (wie alles andere) auf die Liste, und dann Elemente zufällig wählen je nach Bedarf.

+2

Bitte nicht eine Liste "liste". Sie überschreiben die Funktion mit dem gleichen Namen. – dawg

+0

Whoops, guter Fang @dawg! Ich bin kein Haupt-Python-Entwickler :) Bearbeitet! – rageandqq

0

Ich würde eine Klassenvariable hinzufügen, die alle Knoten hält (die am Ende des __init__ hinzugefügt werden) und eine Klassenmethode zwei zufällig zu bekommen:

import random 

class Node: 
    node_instances = [] 
    def __init__(self, parent = None, length_to_parent = None, name = None, left = None, right = None, internal = 1, root = 0): 
     self.parent = parent # parent node 
     self.length_to_parent = length_to_parent # length to the parent node 
     self.name = name # name of the node (to-be-defined name if external node(leaf), None if internal node) 
     self.left = left # left child 
     self.right = right # right child 
     self.internal = internal # indicate if the node is an internal node 
     self.root = root 
     Node.node_instances.append(self) 

    @classmethod 
    def get_random_instances(cls): 
     return random.sample(cls.node_instances, 2) 

, die Sie mögen können:

Verwandte Themen