列表中满足给定条件的连续元素的计数

2024-04-19 05:16:16 发布

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

我有一个整数列表,例如:

list1 = [[1,2,3],[1,2,5,6,8],[2,4,6,9,7],[1,3],[2,4,3,6,8,2]]

我想得到每个子列表中连续偶数的最大长度作为输出, 输出列表为:

  olist = [1,2,3,0,3]

这是我的密码:

olist=[]
for ii in list1:
    if all(item % 2 == 0 for item in ii):
        olist.append(len(ii))
print (olist)

但这个密码是错的。你知道吗


Tags: in密码列表forlenif整数all
3条回答

让我们保持简单。你需要两个回路。您还需要一个计数器来跟踪当前计数。为了简单起见,您可以让tr跟踪最大的计数。你知道吗

tr = [0] * len(lst)
for i, l in enumerate(lst):
    counter = 0
    for v in l:
        if v % 2 == 0:
            counter += 1
        else:
            tr[i] = max(counter, tr[i])
            counter = 0
    tr[i] = max(counter, tr[i])

print(tr)
# [1, 2, 3, 0, 3]

您可以使用itertools.groupby将数字分组为偶数/奇数组,然后使用max:

from itertools import groupby

def max_even(lst):
    result = []
    for e in lst:
        it = (sum(1 for _ in group) for k, group in groupby(e, lambda x: x % 2) if not k)
        m = max(it, default=0)
        result.append(m)
    return result

l = [[1,2,3],[1,2,5,6,8],[2,4,6,9,7],[1,3],[2,4,3,6,8,2]]

res = max_even(l)
print(res)

输出

[1, 2, 3, 0, 3]
myList = [[1,2,3],[1,2,5,6,8],[2,4,6,9,7],[1,3],[2,4,3,6,8,2]]
outList = []
for i in myList:
    max_Length = 0
    myLength = 0
    interim_list = []
    for j in i:
        if j%2 == 0:
            myLength = myLength + 1
            if myLength > max_Length:
                max_Length = myLength
        else:
            myLength = 0
    outList.append(max_Length)
outList    
    [1,2,3,0,3]

相关问题 更多 >