按某个重复索引值拆分列表

2024-10-02 12:38:07 发布

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

我有一个整数列表,其中有些是连续的数字。在

我所拥有的:

myIntList = [21,22,23,24,0,1,2,3,0,1,2,3,4,5,6,7]等。。。在

我想要的:

MyNewIntList = [[21,22,23,24],[0,1,2,3],[0,1,2,3,4,5,6,7]]

我希望能够按元素0拆分这个列表,也就是说,当循环时,如果元素是0,则将列表拆分为单独的列表。 然后,在拆分myIntList之后,无论拆分多少次(基于查找元素0的重复次数),我都希望将每个“split”或一组连续整数追加到列表中的一个列表中。在

我还能用“字符串列表”而不是整数来做同样的事情吗?(根据重复出现的元素将主字符串列表拆分为更小的列表)

编辑:

我该如何用连续的数字来分割这个列表呢?我的列表中有一部分从322跳到51,中间没有0。我想分开:

^{pr2}$

进入

[[...319,320,321,322],[51,52,53...]]

基本上,如何用连续的数字分割列表中的元素?在

发布在此处: Split list of lists (integers) by consecutive order into separate lists


Tags: 字符串元素编辑列表数字整数事情次数
3条回答

可以使用切片:

myIntList = [21,22,23,24,0,1,2,3,0,1,2,3,4,5,6,7]
myNewIntList = []
lastIndex = 0
for i in range(len(myIntList)):
    if myIntList[i] == 0:
        myNewIntList.append(myIntList[lastIndex:i])
        lastIndex = i

myNewIntList.append(myIntList[lastIndex:])
print(myNewIntList)
# [[21, 22, 23, 24], [0, 1, 2, 3], [0, 1, 2, 3, 4, 5, 6, 7]]

可以使用str.split函数拆分字符串:

^{pr2}$
it  = iter(myIntList)
out = [[next(it)]]
for ele in it:
    if ele != 0:
        out[-1].append(ele)
    else:
        out.append([ele])

print(out)

或者在函数中:

^{pr2}$

如果在开头有一个0,它将捕获:

In [89]: list(split_at(0, myIntList))
Out[89]: [[21, 22, 23, 24], [0, 1, 2, 3], [0, 1, 2, 3, 4, 5, 6, 7]]

In [90]: myIntList = [0,21, 22, 23, 24, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7]

In [91]: list(split_at(0, myIntList))
Out[91]: [[0, 21, 22, 23, 24], [0, 1, 2, 3], [0, 1, 2, 3, 4, 5, 6, 7]]

(我隐约怀疑我以前做过,但现在找不到了。)

from itertools import groupby, accumulate

def itergroup(seq, val):
    it = iter(seq)    
    grouped = groupby(accumulate(x==val for x in seq))
    return [[next(it) for c in g] for k,g in grouped]

给予

^{pr2}$

(也就是说,在实践中,我使用与其他人相同的循环/分支的yield版本,但我将发布上面的内容以供变化。)

相关问题 更多 >

    热门问题