Python 创建一个包含打乱元素并按对象引用的子列表

标签 python list python-3.x pandas pointers

我通过搜索没有找到问题的答案,所以希望您能帮助我。

我有一个包含 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/

相关文章:

javascript - 是否可以在列表中的背景图像上触发 jQuery 单击事件?

python - 自定义排序列表,了解一些项目的顺序

python - 为什么我无法在 Django orm 中从数据库中检索日期时间值?

Python mysql 错误#1064

python - 计算列值满足不同条件的次数百分比

Python Eclipse PyDev

python - 连接 Pandas 日期时间

python - 值错误: How to iterate through a tuple of Boolean True/False statements?

python - 可以一次 append 多个列表吗? (Python)

python - 在 AWS Lambda 中连接 AWS RDS (psql)