2017-05-19 18 views
-3

我需要随机选择从类节点2个实例选择实例:Python的 - 如何从任意一类

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

您可以将对象保存在列表中:'[your_object()for _ in range(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

Yup注意到了,谢谢@abccd – Wboy

+0

是的,这是更好,upvoted,但是为了改善,你还可以添加另一个例子'random.choices(lst,k = 2)',并指定它只适用于python 3.6 :) – abccd

+0

@abccd That's 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

哎呀,很好的@dawg!我不是主要的Python开发者:)编辑! – rageandqq

0

我想补充一类变量保存的所有节点(这是在__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) 

,您可以使用这样的:

相关问题