【发布时间】:2020-07-04 12:41:22
【问题描述】:
我有一个列表列表 a 包含 7 个列表,还有一个列表列表 x 包含 2 个列表。我想测试a 中的列表与x 中的列表。
我的目标是逐项比较,找出a 中有多少个列表的所有值都大于x 中的对应项。
条件和计数器检查 a 是否触及 x。注意:我对用列表计算 多少 个项目不感兴趣,例如 a1,touch x1。一旦 a1 和 x1 接触,我就会数一下,然后可以移动到 a2,依此类推。
但是,计数器没有正确更新。关于如何解决这个问题的任何建议?这是我的代码。我期望的结果显示在代码下方。
编辑
为了阐明预期结果,我更新了示例,将第二个值添加到 x。所以已经从x = [[10], [14]]更新到x = [[10, 11], [14, 12]]
以下更新。
x = [[10, 11], [14, 12]]
a = [[9, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 15], [15, 16]]
def touch(e, f):
e = np.array(e)
f = np.array(f)
count = []
counter = 0
for i, lst in enumerate(e):
if np.all(f > lst): # This is the condition
counter += 0 # Counts violations of the condition
count.append(counter)
if i == 1:
counter = 0
else:
counter += 1 # Counts violations of the condition
print(counter)
count.append(counter)
if i == 1:
counter = 0
return count
touching = touch(x, a)
print(touching)
我期望的结果是这样的:
[2, 6]
但我明白了:
[1, 2]
编辑
为了澄清预期结果[2, 6]:我正在比较a 和x 中的每个列表,a 中的第 1 项与x 中的第 1 项,a 中的第 2 项到 @ 中的第 2 项987654338@.
所以:a1_1 (9)(即a 的列表 1 中的项目 1)低于 x1_1 (10)。 a1_2 (10) 等于 x1_2 (10) - 这意味着有 2 次违反条件。 a3_1 (11) > x1_1 (10) 和 a3_2 (12) > x1_2 (11) 以及 a 中的其他列表也高于其对应的元素。对于 x2(x 中的第二个列表):,a 中的所有列表都较低,除了 a7,其中 a7_1 (15) 高于 x2_1,a7_2 高于 x2_2。因此[2, 6]。
【问题讨论】:
-
为什么结果会是
[2, 6]? -
您能否解释一下您是如何从输入数据中得出预期结果的?
-
不应该是[5,1]的结果吗?
-
我希望
[2, 6]因为a中的列表中的任何元素都不能小于或等于x中的元素。与x2相比,只有a中的最后一个列表满足该条件。 -
那么“找出
a中有多少个列表的所有值都大于x中的对应项”应该更正。
标签: python numpy for-loop enumerate