Python使用shuffled元素创建子列表并按对象引用

时间:2017-03-22 12:58:45

标签: python list python-3.x pandas pointers

我无法通过搜索找到问题的答案,所以我希望你能帮助我。

我有一个包含pandas DataFrame对象的列表。现在我想从这个列表中创建两个子列表。假设我想创建两个列表,两个列表的长度都是原始列表的一半。每个元素只能出现在一个列表中,并且不能出现多次。 DataFrame对象很大,所以我只想使用指针。我希望将列表顺序改组。

示例:我列出了a个元素。为了得到一个拖曳的指数顺序,我可以做以下(np指numpy):

shuffledElements = list(range(a.len()))
shuffledElements = np.random.shuffle(shuffledElements)

现在,我如何创建两个具有随机元素顺序的子列表,但不将元素复制到子列表中而是使用指针代替?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您需要做的就是制作一份列表的浅表副本,随机播放,然后创建一个包含一半元素的列表和一个包含另一半列表的列表。

>>> a = [1,2,3,4]
>>> shuffled = a[:] # shallow copy
>>> np.random.shuffle(shuffled) # shuffle in place
>>> left = shuffled[:len(shuffled)/2]
>>> right = shuffled[len(shuffled)/2:]
>>> left
[4, 3]
>>> right
[2, 1]

没有复制任何数据(除了对内存中某处的整数对象的引用)。

>>> left[0] is a[3]
True

您可以使用包含各种对象的列表执行相同操作,我只使用整数进行演示。 (当然,如果您的原始列表中包含奇数个元素,则必须调整代码,但这不仅限于此处。)