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

2024-05-15 03:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

  1. k=0.1(四舍五入)
  2. 每5 k=0.1,但不是每10
  3. 如果一行中正好有10个k=0.1,则只提取一个值,如果有更多或更少的值,则忽略不计(注意k=0.1可以出现在任何点上,因此我不能仅索引切片)

我能做1。和2。但我们刚刚得到一个新的大型数据集,其中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])

示例(长度对不起)

a, b, c
33, 1, 0
33, 2, 0
30, 3, 0
33, 4, 0
33, 5, 0.1
33, 6, 0.1 
31, 7, 0.1 
33, 8, 0.1 
37, 9, 0.1 
33, 10, 0.1 
33, 11, 0.1 
36, 12, 0.1 
33, 13, 0.1 
33, 14, 0.1
33, 15, 5
39, 16, 5
33, 17, 0.1 
33, 18, 0.1 
36, 19, 0.1 
33, 20, 0.1 
32, 21, 0.1
33, 22, 0.1 

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


Tags: 数据in列表forif顺序count时间
1条回答
网友
1楼 · 发布于 2024-05-15 03:25:53

如果您只需要每个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')]

相关问题 更多 >

    热门问题