【发布时间】:2020-07-03 20:58:48
【问题描述】:
我有一个列表 a 包含 100 个列表和一个列表 x 包含 4 个列表(所有列表长度相同)。我想测试a 中的列表与x 中的列表。我的目标是找出a 中的数字“触摸”x 中的数字的频率。换句话说,所有列表都是一条线上的点,a 中的线不应接触(或交叉)x 中的线。
编辑
在代码中,我首先针对 x1 测试 a(例如 a1、a2 ... a100)中的每一行,然后针对 x2、x3 和 x4 进行测试。条件和计数器检查 a 是否触及 x。注意:我对计算 a1 中的 多少 个项目不感兴趣,例如 touch x1。一旦 a1 和 x1 接触,我就会数一下,然后可以移动到 a2,依此类推。
但是,计数器没有正确更新。它似乎没有针对所有x 测试a。关于如何解决这个问题的任何建议?这是我的代码。
编辑
我已经更新了代码,以便更容易复制问题。
x = [[10, 11, 12], [14, 15, 16]]
a = [[11, 10, 12], [15, 17, 20], [11, 14, 16]]
def touch(e, f):
e = np.array(e)
f = np.array(f)
lastitems = []
counter = 0
for lst in f:
if np.all(e < lst): # This is the condition
lastitems.append(lst[-1]) # This allows checking the end values
else:
counter += 1
c = counter
return c
touch = touch(x, a)
print(touch)
我得到的结果是:
2
但我希望这样:
1
2
【问题讨论】:
-
如果没有
x和a,我们将无法重现您的结果 -
实际文件很大,但我添加了一个示例,说明
x和a的样子。 -
现在,
touch(x, a)给了2。不知道你为什么在数据框中提到“爆炸”。如果你真的需要帮助,请编写易于复现的代码! -
@Jorge:抱歉,你是对的。已更新代码并编辑了问题。希望现在更容易了。
标签: python-3.x pandas numpy conditional-statements counter