Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在元组列表中查找索引_Python_Indexing_Tuples - Fatal编程技术网

Python 在元组列表中查找索引

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 如何执行此操作?您可以将+与生成器表达式一

我有一个元组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

如何执行此操作?

您可以将+与生成器表达式一起使用:

>>> 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中两个值周围的非常小的结构。