我在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:
....
以便检查我的索引是否在元组的序列中。我怎么能这样做?
答案 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;举个例子。您必须先将数字索引转换为字符串。