如何使用标记值创建子列表?

How to create sublists using a sentinel value?

我有 python 包含至少 990 个元素(压力值、数字)的列表,例如

lst = ['x','y','z','g','h',1600000,'c','y','n','h','j','y', 1600000]

转折点由标记值 1600000 标记,可以出现在列表中的任何位置。我试图提出包含 1600000 之间数字的子列表。由于没有固定的间隔,索引将不起作用。

例如,从lst,我想创建:

[['x','y','z','g','h'],['c','y','n','h','j','y']]

我能得到这方面的提示吗?

您似乎在尝试提取 160000s 之间的元素。

作为建议,您应该首先 count() 160000(或您用于转折点的任何内容)以确保在给定列表中恰好有两个转折点。否则,您应该在给定列表中使用不同数量的 turning points 来处理不同的情况。当正好有两个160000时,用find()求出这两个点的索引。最终,你可以只得到给定列表的子列表在 [ firstTurningPointIndex, secondTurningPointIndex ]

范围内

所以,我会首先研究如何遍历列表,然后研究如何追加到适当的子列表。

因此,您需要弄清楚如何在达到转折点时停止将变量放入每个子列表并移至下一个子列表。

此外,计算出一些 ifelse 来阻止转折点出现在您的数据中(如果那是您想要的)。

最后就是return变量,看看结果是不是你想要的。如果不行再试一次。

我想出了一个解决方案:

def split_list(l,n):
  rl=[[]]
  c=0
  for x in l:
    if x!=n:
      rl[c].append(x)
    else:
      rl.append([])
      c+=1
  return(rl)

这 returns 每个间隔的所有子列表(space 由 1600000 分隔)。 我这样做是为了让您可以输入任何实用值,它会根据该值 return 子列表。

这样使用:

a=split_list(li,1600000)

创建两个列表并将值附加到一个列表,一旦出现转折点,将该列表附加到另一个列表:

def split_list_at_n(lst,n):
    temp = []
    output = []
    if lst[-1] != n:
        lst.append(n)
    for x in lst:
        if x==n:
            output.append(temp)
            temp = []
        else:
            temp.append(x)
    return output

split_list_at_n(lst, 1600000)

输出:

[['x', 'y', 'z', 'g', 'h'], ['c', 'y', 'n', 'h', 'j', 'y']]

与首先找到转折点的索引不同,这只遍历列表一次。