Python – 在不考虑重复元素的情况下打印最长连续列表的方法
给定一个数字列表,任务是打印最长的连续(严格)列表,而不考虑重复元素。如果有多个答案,请打印任何人。在 Django 或烧瓶中处理一些 Web 开发项目时,这类问题很常见。
以下是解决上述任务的一些方法。
注意:如果有多个答案,请打印任何人
Input:
[1, 2, 3, 5, 6, 6, 7, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 20, 21]
Output:
[13, 14, 15, 16]
Explanation :
Original list = [1, 2, 3, 5, 6, 6, 7, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 20, 21]
Calculated list = [13, 14, 15, 16, 16, ]
Unique elements = [13, 14, 15, 16, ]
方法一:使用迭代
执行此操作时想到的基本方法是打印最长连续列表的简单方法。
Python3
# Python code to print longest consecutive list.
# Input list initialization
Input = [12, 13, 14, 17, 18, 23, 24, 25, 25, 26, 27]
# Output list initialization
Output = []
temp = []
last = -1
# Iteration
for elem in Input:
if elem - last == 1:
temp.append(last)
else:
temp.append(last)
Output.append(temp)
temp = []
last = elem
ans = []
most = 0
for elem in Output:
if len(elem)> most:
most = len(elem)
ans = elem
# Printing output
print("Initial List is")
print(Input)
print("Longest Consecutive list is :")
print(ans)
Python3
# Python code to print longest consecutive list.
# Importing
from itertools import groupby
# List Initialization
Input = [1, 2, 3, 5, 6, 6, 7, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 20, 21]
# Using zip
z = zip(Input, Input[1:])
# Using groupby
lis = [list(y) for i, y in groupby(z, key = lambda x: (x[1] - x[0]) == 1)]
# Taking max according to keylength
out = max(lis, key = len)
# Output list Initialization
output = []
for elem in out:
output.append(elem[0])
output.append(elem[1])
# Converting to set
output = list(set(output))
# Sorting output
output.sort()
# Printing answer
print("Initial list is ")
print(Input)
print("Longest Consecutive list is:")
print(output)
输出:
Initial List is
[12, 13, 14, 17, 18, 23, 24, 25, 25, 26, 27]
Longest Consecutive list is :
[23, 24, 25]
方法二:使用 groupby 和 zip
使用 Groupby 和 zip 是打印最长连续列表的最优雅方式。
Python3
# Python code to print longest consecutive list.
# Importing
from itertools import groupby
# List Initialization
Input = [1, 2, 3, 5, 6, 6, 7, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 20, 21]
# Using zip
z = zip(Input, Input[1:])
# Using groupby
lis = [list(y) for i, y in groupby(z, key = lambda x: (x[1] - x[0]) == 1)]
# Taking max according to keylength
out = max(lis, key = len)
# Output list Initialization
output = []
for elem in out:
output.append(elem[0])
output.append(elem[1])
# Converting to set
output = list(set(output))
# Sorting output
output.sort()
# Printing answer
print("Initial list is ")
print(Input)
print("Longest Consecutive list is:")
print(output)
输出:
Initial list is
[1, 2, 3, 5, 6, 6, 7, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 20, 21]
Longest Consecutive list is:
[13, 14, 15, 16]