Python 在元组列表中查找索引
我有一个元组seg=[874893649851012031]的列表和一个索引。我想检查索引是否在那些元组的范围内,例如,876在,而870不在 我的代码如下:Python 在元组列表中查找索引,python,indexing,tuples,Python,Indexing,Tuples,我有一个元组seg=[874893649851012031]的列表和一个索引。我想检查索引是否在那些元组的范围内,例如,876在,而870不在 我的代码如下: if [x for (x, y) in seg if x <= index <= y]: print ("index inside the segment") 但是,我还想返回索引是否在第一秒。。。列表段 例如,对于index=876,返回1;对于index=1015,返回3 如何执行此操作?您可以将+与生成器表达式一
if [x for (x, y) in seg if x <= index <= y]:
print ("index inside the segment")
但是,我还想返回索引是否在第一秒。。。列表段
例如,对于index=876,返回1;对于index=1015,返回3
如何执行此操作?您可以将+与生成器表达式一起使用:
>>> seg = [(874, 893), (964, 985), (1012, 1031)]
>>> index = 876
>>> next((i for i, (s,f) in enumerate(seg) if s <= index <= f), None)
0
或者,如果您想迭代:
>>> for i in (i for i, (s,f) in enumerate(seg) if s <= index <= f):
... print("in segment:", i)
...
in segment: 0
感谢@jpp的提示,如果给定的索引不在元组表示的任何范围内,则可以使用它。您可以将+与生成器表达式一起使用:
>>> seg = [(874, 893), (964, 985), (1012, 1031)]
>>> index = 876
>>> next((i for i, (s,f) in enumerate(seg) if s <= index <= f), None)
0
或者,如果您想迭代:
>>> for i in (i for i, (s,f) in enumerate(seg) if s <= index <= f):
... print("in segment:", i)
...
in segment: 0
感谢@jpp的提示,如果给定索引不在元组所表示的任何范围内,则可以使用它,前提是: 列表已排序 第一个数字小于第二个数字 没有重叠
index=870
seg = [(874, 893), (964, 985), (1012, 1031)]
for i, t in enumerate(seg):
if index >= t[0] and index <= t[1]:
print i
假设: 列表已排序 第一个数字小于第二个数字 没有重叠
index=870
seg = [(874, 893), (964, 985), (1012, 1031)]
for i, t in enumerate(seg):
if index >= t[0] and index <= t[1]:
print i
正如其他人指出的,您可以使用来获取索引。我还认为,如果将元组视为范围,则应该创建它们。这使得检查值是否在范围内非常直观:值在范围内 显然,如果您使用的是Python 2.x,那么使用范围会带来一些成本,这是一个比较大的成本,因为它会生成所有值的实际列表,不幸的是,xrange返回的对象没有实现_包含_。但是,如果你在很多地方做这种事情,那就更好了
根据具体情况,您可以将元组结构替换为范围结构,而不是使用星图。正如其他人所指出的,您可以使用来获取索引。我还认为,如果将元组视为范围,则应该创建它们。这使得检查值是否在范围内非常直观:值在范围内 显然,如果您使用的是Python 2.x,那么使用范围会带来一些成本,这是一个比较大的成本,因为它会生成所有值的实际列表,不幸的是,xrange返回的对象没有实现_包含_。但是,如果你在很多地方做这种事情,那就更好了
根据具体情况,您可能只需要将元组结构替换为范围结构,而不需要进行星图绘制。您是否正在寻找类似于打印的东西[i+1代表enumerateseg中的i,x,y如果x您正在寻找类似打印的东西[i+1表示枚举中的i,x,y,如果x该死,再次被打败!回答很好:-+1@ChristianDean谢谢:快手指here@jpp更新:@Theaus是OP问题中的一个好地方,但为了未来的访问者,我想我会将其忽略。我确信,如果他们希望元组是基于1的,那么他们可以自己进行增量:该死,又被打败了!回答得很好:-+1@ChristianDean谢谢:快手指here@jpp更新:@Theaus从OP的问题中找到了一些好的地方,但我想为了未来的访问者,我会将其忽略。我确信,如果他们希望元组是基于1的,那么他们可以自己进行增量:是的,我也在考虑元组范围。我不知道效率会受到怎样的影响。@ChristianDean这取决于你多久做一次,以及你如何使用这些值。在大多数情况下,成本应该可以忽略不计-范围只是Python 3.x中两个值周围的非常小的结构。是的,我也在考虑创建元组范围。我不知道但是效率会受到多大的影响。@ChristianDean这取决于您执行此操作的频率以及如何使用这些值。在大多数情况下,成本应该可以忽略不计—范围只是Python 3.x中两个值周围的非常小的结构。