python - 在给定条件下查找列表中下一项的位置

时间:2015-09-30 01:20:25

标签: python indexing position next find-occurrences

我对Python非常陌生,因此非常感谢愚蠢的解释。 我有一个我从csv文件中读到的数据,我已经操作过以下形式: [(T1,N1,V1),(T2,N2,V2),(T3,N3,V3),.​​..]

我试图做的是,给定v中的非零值,找到下一次出现的n的位置,该值对于v具有零值,并确定t值的差异。到目前为止,这是我的代码:

d=[]
for i,x in enumerate(list):
    if x[2]!=0:
        for j,y in enumerate(list):
            if x[1]==y[1] and j>i and y[2]==0:
                d.append(y[0]-x[0])
    else: d.append(0)

print d

我使用MATCH和OFFSET函数在excel中做到了这一点,但我有点失去过渡到索引并在此枚举。

我的第一个问题是嵌套for循环在找到第一个匹配时不会停止,因此它会为每个匹配的n值附加t值差异。我只想找到第一场比赛。

我的第二个问题是,如果有更好的方法可以做到这一点,那么嵌套的for循环并不总是从我的列表的开头开始,而是从索引i开始。我处理的是非常大的数据集。

编辑:我设法使它工作,虽然它非常不优雅(时间和注释是列表中每个元组的第1和第2个元素的列表):

d=[]
for i,x in enumerate(list):
    if x[2]!=0:
        d.append(notes[i+1:].index(x[1]))
    else: d.append("NA")


dur=[]
for i,j in enumerate(d):
    if j!="NA":
        dur.append(times[i+j+1]-times[i])
    else: dur.append(0)

我很欣赏有关更清洁解决方案的任何想法。

1 个答案:

答案 0 :(得分:0)

首先请注意,拥有一个名为list的列表并不好。我并不是100%清楚你在寻找什么,但我认为这很有效。

d = []
for index, tup in enumerate(lst):
    if tup[2] != 0:
        for next in lst[index + 1:]:
            if next[2] == 0 and tup[1] == next[1]:
                d.append(next[0] - tup[0])
                break
        if len(d) - 1 != index:
            d.append('NA')
    else:
        d.append('NA')

例如:

  

输入:lst = [(1,3,0),(1,5,6),(1,2,4),(3,4,1),(4,2,0),(7,5,0),(8,4,0)]

     

输出:d = ['NA', 6, 3, 5, 'NA', 'NA', 'NA']

如果您只需要时间并且不需要排列数组,只需删除附加“NA”的任何条件。