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

Posted

技术标签:

【中文标题】python - 在给定条件下查找列表中下一项的位置【英文标题】:python - find position of next item in list, given criteria 【发布时间】:2015-09-30 01:20:24 【问题描述】:

我对 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

我在 excel 中使用 MATCH 和 OFFSET 函数完成了这项工作,但在这里转换到索引和枚举时我有点迷失了。

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

我的第二个查询是是否有更好的方法来执行此操作,因此嵌套的 for 循环并不总是从列表的开头开始,而是从索引 i 开始。我正在处理相当大的数据集。

编辑:我设法让它工作,虽然它很不雅(时间和注释是列表中每个元组的第一个和第二个元素的列表):

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)

如果有任何关于更清洁解决方案的想法,我将不胜感激。

【问题讨论】:

您能否提供一些代码以清楚地显示您遇到问题的部分? 欢迎来到 ***。我们不是代码编写或设计服务:您应该向我们展示您拥有的代码和获得的结果;然后我们帮助您朝着您想要的结果努力。 Python 的索引在列表中查找项目的下一个位置。您可以使用以下内容提取列表的一部分::: middle = [x[1] for x in data_list] ::: 这是否有助于您继续前进? 很抱歉这个措辞很糟糕的问题。我现在已经澄清了。 【参考方案1】:

首先注意,有一个名为 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”的条件。

【讨论】:

太好了,谢谢!请问:我知道if len(d)-1!=index: 确保在后面的某个地方与tup[1] 匹配,但它究竟是如何实现这一点的? @adrianportell 这只是为了排列列表。如果您在列表的其余部分中没有找到匹配项,请将填充值添加到列表中,以便索引对齐。

以上是关于python - 在给定条件下查找列表中下一项的位置的主要内容,如果未能解决你的问题,请参考以下文章

Python每个列表一项的所有组合[重复]

在给定条件的情况下查找列表的最小和最大索引

在 Python 中,如何找到不是某个值的列表中第一项的索引?

如何在 Meteor 中使用 #each 块实现最后一项的条件?

在递减然后递增并且可能包含重复项的列表中查找最小值

计算圆周率(Python123)