【发布时间】:2021-10-08 06:35:15
【问题描述】:
有时,我想从列表 A 中取出每个第 n 个元素并将其放入列表 B,并将所有其他元素放入列表 C。创建列表 B 是基本的 python 切片。有没有一种优雅的方式来创建列表 C?
例如:
A = [0, 1, 2, 3, 4, 5, 6]
B = A[::3] # B = [0, 3, 6]
C = ??? # C = [1, 2, 4, 5]
我能想到的最好的是:
C = [x for x in A if x not in B]
但是当我们从数学上知道应该包含哪些元素时,检查每个元素的成员资格似乎很愚蠢。特别是因为我好奇的场景往往是在机器学习中进行训练/验证/测试拆分,其中列表可能很长。我也对优雅的 numpy 解决方案持开放态度,但我很好奇纯 python 中是否也存在这种解决方案。
【问题讨论】:
-
FWIW,如果您不需要它是确定性的,为什么不改组您的 A 列表,然后进行更简单的拆分?像
B, C = A[:training_size], A[training_size:]这样的东西。这就是我用来创建我的训练/开发/测试集的方式:) -
C = list(set(A).difference(B))然后你得到了C -
否则,你应该找到你需要的on this question。 (注意
set的做法,仅在列表不包含重复且顺序无关紧要时才有效) -
C = [d for i, d in enumerate(A) if i % 3]