Python基础 - 将二维列表转换为一维

这篇具有很好参考价值的文章主要介绍了Python基础 - 将二维列表转换为一维。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在实验中经常会遇到将二维列表(数组)拉平到一维,如将 [[1, 1], [2, 2]] 转换为[1, 1, 2, 2],有以下几种操作方案:

1. 最简单的直接使用循环,如下:

list1 = [[1, 1], [2, 2]]
ans = [item for list in list1 for item in list]
print(ans) # [1, 1, 2, 2]

2. 使用itertools.chain(*iterables),能够去除iterable里的内嵌的一层iterable【注意:只能去除一层,多的层数去除不了,具体实例可看下面】,其中iterables为可迭代对象,如list, string, dict。

from itertools import chain
list1 = [[1, 1], [2, 2]]
ans = list(chain.from_iterable(list1))
print(ans) # [1, 1, 2, 2]


list2 = [[[1, 1]], [2, 2]]
ans2 = list(chain.from_iterable(list2))
print(ans2) # [[1, 1], 2, 2]

3. 使用a.flatten(),但是前提是要把list转换成numpy格式。【注意:无论array外面套了多少层,flatten()都会将其展平成一维。

import numpy as np
list1 = [[1, 1], [2, 2]]
list1 = np.array(list1)
ans = list1.flatten()
ans = ans.tolist()

4. sum(二维列表, [])函数小技巧,但这种方式也只能展开最外面一层,跟itertools.chain()类似。

list1 = [[1, 1], [2, 2]]
print(sum(list1, []))

为什么这种方式可以展平呢?我们来具体看下:

(1) 首先我们要知道在python中两个列表相加为多少?

[1, 2, 3] + [4, 5, 6] = [1, 2, 3, 4, 5, 6]。没错列表相加等价于列表拼接。有同学肯定会想,这个操作跟extend是一样的,其实不同extend是在原对象的基础上进行添加元素,而+操作则会新建一对象

(2) 其次我们把sum拆解来看。sum的本质就是列表内元素相加,所以list1中的[1, 1], [2, 2]就会相加,得到[1, 1, 2, 2],然后得到的值又会和后面的空列表[]进行一次相加操作,也就是[1, 1, 2, 2] + [] = [1, 1, 2, 2],没变。所以会得到展开后的列表。

(3) 那sum后面能不能不放这个空列表[]呢?肯定不行。如果不放,则会默认[1, 1, 2, 2]和0相加,会报错,如下:

list1 = [[1, 1], [2, 2]]
print(sum(list1))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'list'

相似博文将子列表相同位置的元素重组,指路:Python基础 - 将子列表相同位置的元素重组文章来源地址https://www.toymoban.com/news/detail-455955.html

到了这里,关于Python基础 - 将二维列表转换为一维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

    在学习C语言的过程中,理解指针的概念是非常重要的。指针提供了一种直接访问内存地址的方式,使得我们可以更加灵活地管理数据和内存。在本文中,我们将介绍C语言中的二级指针、一维数组与指针,并通过通俗易懂的语言和示例代码来帮助读者理解这些概念。 二级指针

    2024年02月05日
    浏览(44)
  • Java——一维数组和二维数组(主要详讲一维数组)

    目录 一维数组 创建,初始化,赋值 注意 一些数组的便捷使用方法 使用 .length得到数组长度 Arrays相关的使用 二维数组 文章某些地方会出现java与c语言的比较 文章内容参考韩顺平老师的课堂笔记 可以先创建再初始化,也可以创建的时候直接初始化。但是,如果选择先创建再

    2024年02月01日
    浏览(36)
  • 前缀和算法【一维、二维】

    首先这种算法适合于求 从 x 到 y 的和 。 一维代码十分简单,我们只需要每个都记录前面所有的和即可,注意细节 下标从1开始 这里我们就看两种情况:一种是 开始时 ,一种是 执行中 在开始时,因为我们是从1开始,a[0] = 0,所以第一个就是temp; 在执行过程中,因为前一个是

    2023年04月18日
    浏览(23)
  • Python中二维数据(数组、列表)索引和切片的Bug

    对于一维数据进行索引和切片操作,大家都比较熟悉通过下面代码进行实现 对于一维列表元组等相关结果的索引和切片操作,与一维数组类似 对于二维数据的索引和切片就有一些需要注意的事项了,如果一不小心可能会出现意料之外的Bug 上面就是二维数组索引和切片的大部

    2024年01月20日
    浏览(33)
  • 动态规划—— 01背包问题(一维,二维)

    0-1背包问题是一个经典问题,特别是在算法和动态规划领域。问题是关于一个小偷,他有一个可以携带最大重量的背包,并且他有一组物品,其中每个物品都有自己的价值和重量。小偷希望在不超过背包所能承载的最大重量的情况下,最大化他从这些物品中获得的总价值。问

    2024年02月19日
    浏览(36)
  • matlab 二维矩阵变成一维矩阵

    1、一维变二维: https://blog.csdn.net/qq_40584593/article/details/90691276 reshape 2、a(:)即可 https://jingyan.baidu.com/article/d45ad148dc221b29552b80ec.html

    2024年02月11日
    浏览(32)
  • 【PHP】二维数组转一维数组

    在 PHP 中,如果你想将一个二维数组转换为一维数组,你可以使用几种不同的方法。以下是一些常见的方法: array_column() 用于提取数组中的列,最为直接 array_map() 用于对数组中的每个元素应用回调函数,返回的是由回调函数的返回值组成的新数组。 以上任何一种方法都可以

    2024年02月04日
    浏览(47)
  • 【JavaSE】一维数组和二维数组详解

    欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 数组:可以看成是相同类型元素的

    2024年04月09日
    浏览(34)
  • Python中经常会出现ModuleNotFoundError错误,这是导入模块时未正确安装或路径错误所致

    Python中经常会出现ModuleNotFoundError错误,这是导入模块时未正确安装或路径错误所致。这个错误的解决方案有很多种,本篇文章将为大家提供一种解决’No module named ‘torch._six’\\\'错误的方法。 当你运行Python代码时,如果提示 ‘No module named ‘torch._six’’ 错误,原因是你的计算

    2024年02月16日
    浏览(41)
  • C语言中函数返回数组(一维和二维)

    C语言中函数返回数组是很重要的一种应用,有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作,比如一次返回多个值,这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。 函数返回一维数组中需要注意的是:定义函数时需要在函数类型的后

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包