python实现将给定列表划分为元素和大致相等的两个子列表

简介: python实现将给定列表划分为元素和大致相等的两个子列表

正文


假设现有列表[300,150,75,38,19,9,5,2],我想把它划分为两个子列表,并要求两个列表的元素和大致相等,应该如何做?

这是一个很有意思的问题,我们期待的答案应该是:

list1: [300]
list2: [150,75,38,19,9,5,2]

在写这篇博客之前,我已经浏览了 Together_CZ 的答案,他的思路是:元素和较大的列表与元素和较小的列表的差值大于元素和较大列表中的最小元素的时候,需要弹出最小元素加入的元素和较小列表当中。


但该答案实际上是对列表进行重分配,而不是“划分”,如果我仅仅只是想将一个列表前后切分成元素和大致相等的两个子列表,并且保持元素顺序不变化,应该怎么做呢?实际上只需要一些小小的改动就可以了。

def list_split(one_list):
    ''' 将给定的列表划分为元素和大致相当的两个子列表 '''
    num_list = copy.deepcopy(one_list[:]) # 原列表深拷贝
    first_list = [] # 列表构建
    second_list = [] # 列表构建
    # ------ 将原列表划分为元素和大致相对的两个子列表 ------ #
    first_list.append(num_list.pop(0)) # 列表初始化
    second_list.append(num_list.pop(-1)) # 列表初始化
    while len(num_list) != 0: # 若原列表中还有元素
        if sum(first_list) >= sum(second_list): # 若first列表中元素和大于second列表
            second_list.insert(0, num_list.pop(-1)) # 在头部插入
        else:
            first_list.append(num_list.pop(0)) # 在尾部添加
    return first_list, second_list # 返回
if __name__ == "__main__":
  first_list, second_list = list_split([300,150,75,38,19,9,5,2])
  print(first_list)
  print(second_list)

输出:

[300]
[150,75,38,19,9,5,2]

可以看到,子列表的顺序和在原列表中是一样的。

再试一个元素值间隔比较小的list:

# 代码:
first_list, second_list = list_split([300, 299, 298, 297, 296, 295, 294, 293])
print(first_list)
print(second_list)
# 输出:
[300, 299, 298, 297]
[296, 295, 294, 293]
, 294, 293

再试一个乱序的list:

first_list, second_list = list_split([3, 12, 5, 9, 1, 7, 4])
print(first_list)
print(second_list)
# 输出:
[3, 12, 5]
[9, 1, 7, 4]
相关文章
|
2天前
|
索引 Python
Python列表
Python列表。
25 8
|
5天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
24 9
|
13天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
25 14
|
15天前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
29 10
|
1月前
|
数据处理 开发者 Python
Python中的列表推导式:简洁高效的数据处理
在编程世界中,效率和可读性是代码的两大支柱。Python语言以其独特的简洁性和强大的表达力,为开发者提供了众多优雅的解决方案,其中列表推导式便是一个闪耀的例子。本文将深入探讨列表推导式的使用场景、语法结构及其背后的执行逻辑,带你领略这一特性的魅力所在。
|
1月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
|
1月前
|
JavaScript 前端开发 算法
python中的列表生成式和生成器
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生的天地。通过自学前端技术2年半,现正向全栈开发迈进。如果你从我的文章中受益,欢迎关注,我将持续更新高质量内容,你的支持是我前进的动力!🎉🎉🎉
24 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
20 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
17 0