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对我回答的这一方面发表评论。