在列表中搜索索引

时间:2018-03-07 16:16:42

标签: python list

我在python segmentation1和segmentaiton2中有两个列表,其中包含instace的索引元组:

segmentation1 = [('874', '893'), ('964', '985')]
segmentation2 = [('901', '931')] # frame indexes in vid

我还有我要创建的索引和if-else语句,如下所示

#pseudocode:
if index in segmentation1:
        ....
elif index in segementation2:
        ....

以便检查我的索引是否在元组的序列中。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

修改

您在评论中说,您想查看您的号码是否在列表中的元组范围内。你可以用同样的方式实现这个结果:

s1 = [('874', '893'), ('964', '985')]
index = '879'

if [x for (x, y) in s1 if x <= index <= y]:
    print(True)

输出:

True

我强烈建议您将元组转换为int,或者在比较之前进行转换。例如,请查看以下内容:

s1 = [('800', '1001')]
index = '1000'
if [x for (x, y) in s1 if x <= index <= y]:
    print(True)

此示例不会输出,因为'800' <= '1000' <= '1001'将评估为False。转换为int会为您提供正确的输出。

将你的元组转换为整数:

[(int(x), int(y)) for (x, y) in s1]

答案 1 :(得分:2)

我相信这就是你的意思:给定

segmentation1 = [('874', '893'), ('964', '985')]

你想要:

'874' in segmentation1 # true
'875' in segmentation1 # also true
'893' in segmentation1 # true
'894' in segmentation1 # false

如果是这样,您可以使用any()函数来执行此操作:

if any(lbound <= index <= ubound for lbound,ubound in segmentation1):
    pass # do something

但要小心。我看到您在示例中使用字符串作为索引,因此比较基于字符串(即'999'&gt;'1000')。

答案 2 :(得分:1)

如果您要搜索的值(索引)可能是元组的第一个或第二个值,那么原始方法是:

segmentation1 = [('874', '893'), ('964', '985')]
segmentation2 = [('901', '931')] # frame indexes in vid

for (x, y) in segmentation1:
    if x == '893' or y == '893':
        print('found')

这是寻找字符串&#39; 893&#39;举个例子。您必须先将数字索引转换为字符串。