测试值是否在 list/array 中(Ti-Basic)

Testing if value is in list/array (Ti-Basic)

有没有办法测试一个值是否在列表中? 在 Python 中,我认为你可以做类似的事情 '如果 n 在 myList 中: 打印("Value N is in the list.")'

我不想使用 for 循环来分别检查每个值,除非它是唯一的选择。 我使用的是 Ti-84 Plus。

这个搜索思路来自TI-Basic Developer,非常精彩:

假设您有一个名为 x 的值和一个名为 L.

的列表
:If max(1/(1+(abs(L-x))))=1
:Then
//value is in list
:Else
//value is not in list
:End

就是这样!

这是它的工作原理:

abs(L-x)

  • 首先,它从列表的每个值中减去搜索的数字并得到它的绝对值

max(1/(1+(abs(L-x))))

  • 之后,寻找其中最大的元素加11除以它.

:If max(1/(1+(abs(L-x))))=1

  • 如果它是 1,则该值在列表中。为什么?因为 1 / 1 + 0 是 1(数字减去它本身总是 0)而 0 是 1 / 1 + x 的最大可能值(当然对于正数)。如果最大值小于 1,则确定搜索到的值不在列表中。

假设我已经正确考虑,这应该可以工作。非常简单,其中 L₁ 是要搜索的列表,X 是要查找的值。

max(not(L₁-X

分步分析:

  1. L₁-X:从列表中的所有内容中减去值。现在,如果此列表包含零,则表示我们的值在 L₁.
  2. not(L₁-X:反转列表中的所有内容。这会将所有零转换为一,将其他所有内容转换为零。现在,如果此列表包含一个,则表示我们的值在 L₁ 中。如果列表全为零,则不是。
  3. max(not(L₁-X:获取列表中的最大值。如上所述,如果值不在 L₁ 内,则列表将全为零,因此最大值将为零。如果L₁有里面的值,最大值就是1。

这使得检查变得如此简单:

If max(not(L₁-X
Disp "The value was found:",X