在lis中搜索索引

2024-03-28 09:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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:
        ....

所以要检查我的索引是否在元组序列中。我怎么能这么做?你知道吗


Tags: in列表indexif语句frameelse元组
3条回答

编辑

你在评论中说,你想看看你的数字是否在列表中的元组范围内。你可以用同样的方法得到这个结果:

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。转换为ints将提供正确的输出。你知道吗

要将元组转换为整数:

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

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

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”>;“1000”)。你知道吗

如果要搜索的值(索引)可能是元组的第一个或第二个值,则基本方法是:

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')

这里以字符串“893”为例。您必须先将数字索引转换为字符串。你知道吗

相关问题 更多 >