2017-05-19 3 views
-3

クラスからインスタンスを選択する方法:パイソン - ランダム私はランダムクラスノードから2つのインスタンスを選択する必要があります

Class node:

クラスノード:私は保存すると思ってい

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 

をリスト内のノードからのすべてのインスタンスは、random.chooseまたはrandom.shuffleを使用して、リストから2つのノードをランダムに選択します。

しかし、私はどのようにリストにインスタンスを格納するのか知りません...誰でも助けてください!ありがとう

+0

私たちはすべてどこかから始めます。そこで、私はいくつかの基本的なガイドラインを参考にして助けになります。 1)コードのスニペットを(Ctrl + Kでインデントして)投稿すると、スクリーンショットは役に立たない。 2)あなたがしたことを説明してください。 3)期待される成果が助けになるでしょう。 – Wboy

+0

オブジェクトをリストに残しておくだけで、 '[範囲内の(for_範囲)(how_many_you_want)]' '[あなたのオブジェクト()とそのリストからrandom.selectを使用することができます。 – dawg

答えて

1

他のものと同じようにリストにインスタンスを格納することができます。

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)] 

具体的な内容はありますか?

+0

ありがとう、ありがとう@abccd – Wboy

+0

それは良い、upvoted、しかし改善するために、あなたはまた 'random.choices(lst、k = 2)'を追加して、それをpython 3.6のみに指定することもできます:) – abccd

+0

@abccd Thats true !あなたの知識を共有していただきありがとうございます:) – Wboy

0

私はあなたのこの「ノード」がバイナリツリーの一部であると仮定しています。 その場合、ツリーを繰り返し処理し、実行中のリストに参照を格納することができます。あなたがリストに(何か他のもののような)ノードを追加し、その後、必要に応じてランダムにあなたの要素を選択することができるはず

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) 

:の線に沿って

何か。

+2

リスト 'リスト'をしないでください。同じ名前で関数を上書きします。 – dawg

+0

おっと、良いキャッチ@ダウグ!私はメインのPython開発者ではありません:)編集! – rageandqq

0

私はランダムに2を取得するために(__init__の最後に追加されている)すべてのノードを保持しているクラス変数、クラスメソッドを追加したい:あなたは次のように使用することができます

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) 

を: