Python 基于所需值周围的项的多条件元组搜索

Python 基于所需值周围的项的多条件元组搜索,python,algorithm,Python,Algorithm,我有一个3个元组I,j,k的列表,其中I是我的输出变量,j是时间(因此设置数据集的序列),k是输入变量。第一个“命中”需要保持在结果集中的位置1,因为它们稍后会被枚举,并且顺序是关键的 我想提取[I,j]用于: k=0.1(四舍五入) 每5 k=0.1,但不是每10 k 仅当一行中正好有10个k=0.1时才提取一个值,而忽略其中的多个或少个值(请注意,k=0.1可以出现在任何点上,因此我不能仅对切片进行索引) 我能做1。二,。但我们刚刚得到一个新的大型数据集,其中有3个。现在是个问题 value

我有一个3个元组I,j,k的列表,其中I是我的输出变量,j是时间(因此设置数据集的序列),k是输入变量。第一个“命中”需要保持在结果集中的位置1,因为它们稍后会被枚举,并且顺序是关键的

我想提取[I,j]用于:

  • k=0.1(四舍五入)
  • 每5 k=0.1,但不是每10 k
  • 仅当一行中正好有10个k=0.1时才提取一个值,而忽略其中的多个或少个值(请注意,k=0.1可以出现在任何点上,因此我不能仅对切片进行索引)
  • 我能做1。二,。但我们刚刚得到一个新的大型数据集,其中有3个。现在是个问题

    values = []
    count = 0
        for i,j,k in zip(a, b, c):
            if float('%.1g' % k) == 0.1:
                count += 1
                if (count % 5) == 0 and (count % 10 != 0):               
                    values.append([i,j])
    
    示例(对不起,篇幅太长)


    我只想从这个列表中得到[37,9],因为这是一个10块k=0.1的第五个条目。

    如果你只想得到每个10块的第五个条目,那么使用一个简单的生成器函数只返回满足
    c==0.1
    的10块:

    def gen(a, b, c):
        g = []
        for i, j, k in zip(a, b, c):
            if format(float(k), '.1g') == '0.1':
                g.append((i,j))
            else:
                g = []
            if len(g) == 10:
                yield g
    
    >>> [list(e)[4] for e in gen(a, b, c)]
    [('37', '9')]
    

    我不明白你想做什么,你能给出一个输入和输出的例子吗。顺便说一句,
    float('%.1g'%k)
    float(k)
    一样,字符串格式是不必要的。比较浮点数是否相等是有问题的,只需将其保留为字符串
    k==“0.1”
    。请不要发布链接,只需使用示例数据和预期输出更新您的问题。k值不完全是0.1,如果k=0.10367,则浮点数(k)不等于浮点数('.1g'%k')。k值不相同,因为它们是尝试为0.1Ok的施加电压的测量值,最好使用“格式(浮点(k)”、“.1g”)==“0.1”,比较浮点值是有问题的,请参阅
    def gen(a, b, c):
        g = []
        for i, j, k in zip(a, b, c):
            if format(float(k), '.1g') == '0.1':
                g.append((i,j))
            else:
                g = []
            if len(g) == 10:
                yield g
    
    >>> [list(e)[4] for e in gen(a, b, c)]
    [('37', '9')]