Python 确定列表中相等连续元素的组

Python 确定列表中相等连续元素的组,python,arrays,python-3.x,arraylist,Python,Arrays,Python 3.x,Arraylist,假设我们有一个排序数组 A = [1,2,2,3,7,7,7,9] 我们希望输出如下所示: [1] [2,2] [3] [7,7,7] [9] 这是我的尝试: def func(A): j = 0 for i in range(len(A)): result = [] while A[i] == A[j] and j < len(A)-1: result.append(A[j])

假设我们有一个排序数组

A = [1,2,2,3,7,7,7,9]
我们希望输出如下所示:

[1]

[2,2]

[3]

[7,7,7]

[9]
这是我的尝试:

def func(A):

    j = 0
    for i in range(len(A)):
        result = []
        while A[i] == A[j] and j < len(A)-1:
            result.append(A[j])
            j += 1
        if result != []:
            print(result)
此函数不包括列表中的最后一个元素,并且在^2上也有运行时间,我正在尝试改进它。非常感谢您的帮助。

itertools.groupby是在列表中对类似元素进行分组的一种非常方便的方法:

>>> A = [1,2,2,3,7,7,7,9]
>>> from itertools import groupby
>>> for group in groupby(A):
...     print(list(group[1]))
...
[1]
[2, 2]
[3]
[7, 7, 7]
[9]
itertools.groupby是在列表中对类似元素进行分组的一种非常方便的方法:

>>> A = [1,2,2,3,7,7,7,9]
>>> from itertools import groupby
>>> for group in groupby(A):
...     print(list(group[1]))
...
[1]
[2, 2]
[3]
[7, 7, 7]
[9]

这是一个准时的函数,我很确定至少:

def func(A):
    last_num = A[0]
    last_list = []
    for num in A:
        if last_num == num:
            last_list.append(num)
        else:
            last_num = num
            print(last_list)
            last_list = [num]
    print(last_list)

它不使用嵌套的for循环,而是循环遍历每个元素,并将最后一个数字存储到变量last_num中。如果当前数字与前一个数字相同,则将其添加到last_列表中。否则,将重置所有内容,并打印最后一个_列表。最后,再次打印最后一个列表,因为之后没有数字来激活打印列表的else语句。

这里有一个准时的函数,我很确定至少:

def func(A):
    last_num = A[0]
    last_list = []
    for num in A:
        if last_num == num:
            last_list.append(num)
        else:
            last_num = num
            print(last_list)
            last_list = [num]
    print(last_list)
它不使用嵌套的for循环,而是循环遍历每个元素,并将最后一个数字存储到变量last_num中。如果当前数字与前一个数字相同,则将其添加到last_列表中。否则,将重置所有内容,并打印最后一个_列表。最后,再次打印最后一个列表,因为之后没有数字来激活打印列表的else语句。

这起作用:

L = len(A)
if L > 0:
    prev = A[0]
    print ("[", prev, sep="", end="")

for i in range(1,L):
    if prev != A[i]:
        print ("]")
        prev = A[i]
        print ("[", prev, sep="", end="")
    else:
        print (",", A[i], sep="", end="")
else:
    print ("]")
输出:

这项工作:

L = len(A)
if L > 0:
    prev = A[0]
    print ("[", prev, sep="", end="")

for i in range(1,L):
    if prev != A[i]:
        print ("]")
        prev = A[i]
        print ("[", prev, sep="", end="")
    else:
        print (",", A[i], sep="", end="")
else:
    print ("]")
输出:


您可以使用for循环和两个if来解决问题:

代码如下:

def func(A):
    result = []
    for i in range(len(A)):
        result.append(A[i])

        if i == len(A)-1:
            print (result)
        
        if (i != len(A)-1) and (A[i] != A[i+1]):
            print (result)
            result = []
您提供的输入:

A = [1,2,2,3,7,7,7,9]
您的输出将是:

[1]
[2, 2]
[3]
[7, 7, 7]
[9]

您可以使用for循环和两个if来解决问题:

代码如下:

def func(A):
    result = []
    for i in range(len(A)):
        result.append(A[i])

        if i == len(A)-1:
            print (result)
        
        if (i != len(A)-1) and (A[i] != A[i+1]):
            print (result)
            result = []
您提供的输入:

A = [1,2,2,3,7,7,7,9]
您的输出将是:

[1]
[2, 2]
[3]
[7, 7, 7]
[9]
您可以使用从iterable返回连续键和组作为生成器的函数:

from itertools import groupby

for _, group in groupby(A):
    print(list(group))
您可以使用从iterable返回连续键和组作为生成器的函数:

from itertools import groupby

for _, group in groupby(A):
    print(list(group))

谢谢你的回答,以前从未见过。但是我正在尝试解决这个问题而不导入。谢谢你的回答,以前从未见过。但我试图在不导入的情况下解决这个问题。它确实有效,但我认为如果您使用实际的python列表而不是字符串会更好。我很确定OP需要列表,而不仅仅是字符串。@AyushGarg-什么让您如此确定?在OP的代码中,正在构建的列表只会被打印,而不会被返回。我看不出通过重复的append调用构建列表有什么意义,如果它的目的只是打印。无论如何,我们可以让OP对我的答案的这一方面进行评论。它确实有效,但我认为如果你使用实际的python列表而不是字符串,那会更好。我很确定OP想要列表,而不仅仅是字符串。@AyushGarg-你为什么这么肯定?在OP的代码中,正在构建的列表只会被打印,而不会被返回。我看不出通过重复的append调用构建列表有什么意义,如果它的目的只是打印。无论如何,我们可以让OP对我回答的这一方面发表评论。