Python 如何在满足某些条件的列表中找到第n个连续值的索引?

Python 如何在满足某些条件的列表中找到第n个连续值的索引?,python,list,indexing,sequential,Python,List,Indexing,Sequential,我试图在大于某个数字的列表中找到第三个连续值的索引。例如,在下面的示例中,我想确定有3个大于1的值的索引,这将返回值为1.4的索引。使用我在下面尝试过的代码,我正在检索1.3的值 我尝试使用enumerate,但它返回的是第三个索引总数,而不是第三个顺序值 有没有办法在大于1的条件下识别顺序第三个值 listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6] indexBDF = [i for i, n in enumerate(listtest) i

我试图在大于某个数字的列表中找到第三个连续值的索引。例如,在下面的示例中,我想确定有3个大于1的值的索引,这将返回值为1.4的索引。使用我在下面尝试过的代码,我正在检索1.3的值

我尝试使用enumerate,但它返回的是第三个索引总数,而不是第三个顺序值

有没有办法在大于1的条件下识别顺序第三个值

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]
indexBDF = [i for i, n in enumerate(listtest) if n >= 1 ][2]
print(listtest[indexBDF])
上面的代码返回1.3,因为它是大于1的第三个值。我希望代码返回1.4,因为它是一行中大于1的第三个值。

您可以使用zip、enumerate、all和for循环将值作为3元组进行分析:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

for idx, values in enumerate(zip(listtest, listtest[1:], listtest[2:]), start=2):
    if all(val > 1 for val in values):
        print(f'found 3 sequential values {values} > 1 at index: {idx}')
        break
输出:

found 3 sequential values (1.2, 1.3, 1.4) > 1 at index: 5
Element = 1.4
Index = 5
Element = 1.4 , Index = 5
Element = 2 , Index = 6
Element = 1.6 , Index = 7
您可以使用zip、enumerate、all和for循环将值作为3元组进行分析:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

for idx, values in enumerate(zip(listtest, listtest[1:], listtest[2:]), start=2):
    if all(val > 1 for val in values):
        print(f'found 3 sequential values {values} > 1 at index: {idx}')
        break
输出:

found 3 sequential values (1.2, 1.3, 1.4) > 1 at index: 5
Element = 1.4
Index = 5
Element = 1.4 , Index = 5
Element = 2 , Index = 6
Element = 1.6 , Index = 7
只需使用传统的for循环即可解决此问题:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

occurrences = 0

for index,elem in enumerate(listtest):
    if elem > 1:
        occurrences += 1
                 
        if occurrences == 3:
            print("Element =", elem)
            print("Index =", index)
            occurrences = 0

    else:
        occurrences = 0
输出:

found 3 sequential values (1.2, 1.3, 1.4) > 1 at index: 5
Element = 1.4
Index = 5
Element = 1.4 , Index = 5
Element = 2 , Index = 6
Element = 1.6 , Index = 7
如果要打印所有可能的组合,可以尝试此操作:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

for index,num in enumerate(listtest):
    if index+3 < len(listtest) + 1:
        num_lst = listtest[index:index+3]
        if all(num > 1 for num in num_lst):
            print("Element =",num_lst[-1],", Index =", index+2)
只需使用传统的for循环即可解决此问题:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

occurrences = 0

for index,elem in enumerate(listtest):
    if elem > 1:
        occurrences += 1
                 
        if occurrences == 3:
            print("Element =", elem)
            print("Index =", index)
            occurrences = 0

    else:
        occurrences = 0
输出:

found 3 sequential values (1.2, 1.3, 1.4) > 1 at index: 5
Element = 1.4
Index = 5
Element = 1.4 , Index = 5
Element = 2 , Index = 6
Element = 1.6 , Index = 7
如果要打印所有可能的组合,可以尝试此操作:

listtest = [0.56, 1.25, 0.8, 1.2, 1.3, 1.4, 2, 1.6]

for index,num in enumerate(listtest):
    if index+3 < len(listtest) + 1:
        num_lst = listtest[index:index+3]
        if all(num > 1 for num in num_lst):
            print("Element =",num_lst[-1],", Index =", index+2)

此实现提供了一种通用方法来查找满足某些任意筛选条件的第n个连续元素,该元素将用于包含任何数据类型的列表

def n_seq_item_indexitem_list:list,n:int,filter:callable: 第n项'n'从1开始,即第1个连续项。“过滤器” 是一个函数,用于返回列表中某项的True或False。 如果n<1: raise VALUE ERRORN必须大于0 连续计数=0 对于索引,枚举项列表中的项: 如果是filteritem: 连续计数+=1 其他: 连续计数=0 如果连续计数==n: 回报指数 一无所获 列表测试=[0.56,1.25,0.8,1.2,1.3,1.4,2,1.6] indexBDF=n_seq_item_indexlisttest,n=3,filter=lambda i:i>=1 printlisttest[indexBDF] 输出
此实现提供了一种通用方法来查找满足某些任意筛选条件的第n个连续元素,该元素将用于包含任何数据类型的列表

def n_seq_item_indexitem_list:list,n:int,filter:callable: 第n项'n'从1开始,即第1个连续项。“过滤器” 是一个函数,用于返回列表中某项的True或False。 如果n<1: raise VALUE ERRORN必须大于0 连续计数=0 对于索引,枚举项列表中的项: 如果是filteritem: 连续计数+=1 其他: 连续计数=0 如果连续计数==n: 回报指数 一无所获 列表测试=[0.56,1.25,0.8,1.2,1.3,1.4,2,1.6] indexBDF=n_seq_item_indexlisttest,n=3,filter=lambda i:i>=1 printlisttest[indexBDF] 输出
使用itertools的版本有些难看:


这将查找满足条件的连续项目组,然后尝试读取组中的第三个项目。第一个是结果。

使用itertools的版本有点难看:


这将查找满足条件的连续项目组,然后尝试读取组中的第三个项目。第一个是结果。

您是否尝试过编写一个普通for循环?如果值大于1,则递增计数器,否则将其重置为0。如果计数器达到3,则返回当前循环索引。或者,您需要为列表中的每个值考虑前两个值。大于或>=?索引还是值?你到底想要什么?你试过写一个普通的for循环吗?如果值大于1,则递增计数器,否则将其重置为0。如果计数器达到3,则返回当前循环索引。或者,您需要为列表中的每个值考虑前两个值。大于或>=?索引还是值?你到底想要什么?谢谢,这很有效!我必须在第二个if语句的末尾包含一个break语句,但肯定得到了我所需要的结果。谢谢,这很有效!我必须在第二个if语句的末尾包含一个break语句,但肯定得到了我需要的结果。