python - 如何返回由 Python 列表中的连续数字组成的最长子序列?
问题描述
我能够计算由列表中连续数字形成的最长升序子序列的长度,或任何子序列的最大和。但是,我有点难以打印出具有连续数字的最长子序列(例如:8、9、10、11、12)。我怎样才能做到这一点?每次在 new_list 中检查 num 值时,我是否应该创建一个空列表并覆盖这些值?
提前致谢, lanuit72
def longest_largest_seq(list):
list = [5,6,3,8,3,4,9,8,10,12,11,99,98]
largest = 0
sum = 0
new_list = set(list) #using set to get unique value from the list
max_count = 0
count = 0
for num in list:
if num - 1 not in new_list:
sum = 0
count = 0
while num in new_list:
sum += num
count += 1
num += 1
if sum > largest:
largest = sum
if count > max_count:
max_count = count
return largest, max_count
print(f'Largest consecutive sum and longest consecutive subsequence', longest_largest_seq(list))
解决方案
像这样的东西?
from more_itertools import consecutive_groups
a_list = [5,6,3,8,3,4,9,8,10,12,11,99,98]
sorted_list = sorted(a_list)
grouped = [list(i) for i in consecutive_groups(sorted_list)]
for i in grouped:
print(i)
print('\n', max(grouped, key=len), sep='')
[3]
[3, 4, 5, 6]
[8]
[8, 9, 10, 11, 12]
[98, 99]
[8, 9, 10, 11, 12]
推荐阅读
- javascript - 单击带有 CSS 的 + 图标后自动折叠 Accordian 样式选项卡
- excel - 如何通过考虑 Excel 中的重叠时段来计算总小时数/天
- node.js - Sequelize-Try 块不会捕获 model.create() 错误
- angular - Angular 模板驱动的表单自定义验证
- nginx - 在 Nginx 服务器中通过 Internet(不是 localhost)访问 GraphDB Workbench
- node.js - 如何在 netlify 中为特定路由设置自定义域
- google-apps-script - 有没有办法在 Google Sheet 中获取单元格的格式并将其移动到 Google Doc 以进行报告?
- bash - 循环 n 行 - 创建 csv
- python - 无法理解 For 循环在 Python 中是如何工作的
- flutter - “无法解决包”每次在我自己的包中安装新包