我通过搜索没有找到问题的答案,所以希望您能帮助我。
我有一个包含 pandas DataFrame 对象的列表。现在我想从此列表创建两个子列表。假设我想创建两个列表,长度都是原始列表的一半。每个元素只能出现在一个列表中,并且不能出现多次。 DataFrame 对象很大,所以我只想使用指针。我想要打乱列表顺序。
示例:我有一个包含元素的列表 a
。要获得索引的洗牌顺序,我可以执行以下操作(np 指 numpy):
shuffledElements = list(range(a.len()))
shuffledElements = np.random.shuffle(shuffledElements)
现在,如何创建两个元素随机顺序的子列表,但不将元素复制到子列表,而是使用指针?
感谢您的帮助
最佳答案
您需要做的就是制作列表的浅拷贝,对其进行打乱,然后创建一个包含一半元素的列表和一个包含另一半元素的列表。
>>> 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
您可以对包含任何类型对象的列表执行相同的操作,我只是使用整数进行演示。 (当然,如果你的原始列表有奇数个元素,你就必须调整代码,但这不是这里的重点。)
关于Python 创建一个包含打乱元素并按对象引用的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952337/