【问题标题】:How to check if an item is in a list?如何检查一个项目是否在列表中?
【发布时间】:2019-07-26 15:41:57
【问题描述】:

在 Python 列表中有一个很好的 in 运算符或 __contains__ 方法,可用于检查变量是否在列表中。例如

3 in [1, 2, 3, 4] # returns True

5 in [1, 2, 3, 4] # returns False

对于矩阵,有一个 find 函数,如果变量存在则返回索引矩阵,如果不存在则返回空矩阵:

M = [1, 2, 3, 4]
isempty(find(M == 3)) // returns %f
isempty(find(M == 5)) // returns %t

但我不知道如何检查变量是否在列表中:

L = list(1, 2, 3, 4)

如果您能帮我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: list search find scilab


    【解决方案1】:

    你想做这样的事吗?

    --> x(1).name='john';x(2).age=19;x(2).flag=%t;
    
    --> x(2).name='paul';x(2).age=18;x(3).flag=%f;
    
    --> list2vec(x.name)
     ans  =
    
    !john  !
    !      !
    !paul  !
    
    
    --> list2vec(x.age)
     ans  =
    
       19.
       18.
    
    --> list2vec(x.flag)
     ans  =
    
      T
      T
      F
    

    【讨论】:

    • 好的。所以基本上列表/数组的任何元素都可以是结构,并且可以以矢量化形式调用。
    • 您只能使用结构来执行此操作,而不是列表。但是,当 x 是上述结构数组时,例如x.age 返回一个列表,因为不保证类型是同质的。这就解释了后续使用list2vec创建数组。
    • 感谢您的支持。
    【解决方案2】:

    在 Scilab 中,列表是异构容器,这会阻止相等运算符 == 具有与矩阵相同的行为。但是,具有同质类型的对象列表可以在某种意义上通过list2vec 转换为向量,这可以实现您想做的事情。

    【讨论】:

    • 感谢您的回复。由于异质性,我使用列表。但特定的行或列是同质的。有什么方法可以提取特定的行或列然后转成向量然后使用find?
    • 没有。 list2vec 将所有元素作为一个整体连接起来,并在第二个输出中为您提供每个元素的大小,例如l=list(1,[2 3;4 5]); [v,s]=list2vec(l)
    • 谢谢。所以没有办法只提取 tlist 的一行或一列?否则是否有类似 Scilab 的 Python Pandas 数据框?
    • tlists 不是合适的类型。要执行此类操作,您应该使用结构数组。请参阅我对最初问题的回答。
    • 感谢您的支持。我会仔细阅读答案,如果我有更多问题,我会回来。
    猜你喜欢
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多