保姆级讲解 python之zip()方法实现矩阵行列转置

ops/2025/1/31 19:42:40/

目录

  • 引入
  • 1.手动交换行列元素
  • 2.引入外部库
  • 进入正题
    • 使用列表推导式和zip()
    • 基本用法
    • 解压缩
    • 实现行列转置
  • 实战演练


引入


给你一个二维数组(矩阵),你怎么实现行列转置?
在Python中,实现矩阵行列转置有多种方法



1.手动交换行列元素


通过遍历矩阵的每个元素,并将其放置到新位置来实现转置。

示例实现:

python"># 定义一个矩阵
matrix = [[1, 2, 3], [4, 5, 6]]# 获取矩阵的行数和列数
rows = len(matrix)
cols = len(matrix[0])# 创建一个新的矩阵用于存放转置结果
transposed_matrix = [[0 for _ in range(rows)] for _ in range(cols)]# 手动交换行列元素
for i in range(rows):for j in range(cols):transposed_matrix[j][i] = matrix[i][j]print("原始矩阵:")
for row in matrix:print(row)
print("转置后的矩阵:")
for row in transposed_matrix:print(row)
'''
原始矩阵:
[1, 2, 3]
[4, 5, 6]
转置后的矩阵:
[1, 4]
[2, 5]
[3, 6]
'''


2.引入外部库


示例实现:

python">import numpy# 定义一个矩阵
matrix = numpy.array([[1, 2, 3], [4, 5, 6]])# 转置矩阵
transposed_matrix = matrix.Tprint("原始矩阵:")
for row in matrix:print(row)
print("转置后的矩阵:")
for row in transposed_matrix:print(row)
'''
原始矩阵:
[1, 2, 3]
[4, 5, 6]
转置后的矩阵:
[1, 4]
[2, 5]
[3, 6]
'''

太方便了我就要这个
但是算法竞赛是不支持导入第三方库的,中道崩殂。
那这么办?该zip()登场了



进入正题


使用列表推导式和zip()


zip() 是 Python 内置的一个非常有用的功能,它用于将多个可迭代对象(如列表、元组等)组合在一起,然后返回一个由这些可迭代对象组成的元组的迭代器。
每次迭代时,zip() 会从每个可迭代对象中取出一个元素,并把这些元素组合成一个新的元组。


基本用法

假设你有两个列表 a 和 b,你可以使用 zip(a, b) 来将它们配对:

示例:

python">a = ['a', 'b', 'c']
b = [1, 2, 3]zipped = zip(a, b)
print(list(zipped)) # 输出结果将会是:[('a', 1), ('b', 2), ('c', 3)]

解压缩

通过使用 * 操作符,可以解压之前用 zip() 组合的数据:

示例:

python">zipped = [('a', 1), ('b', 2), ('c', 3)]
a, b = zip(*zipped)print(a)  # 输出: ('a', 'b', 'c')
print(b)  # 输出: (1, 2, 3)

实现行列转置


zip(*matrix) 会将 matrix 的每一列作为新的子列表,从而实现矩阵的转置。操作符在这里用于解包矩阵的行,使每一行都作为一个独立的参数传递给 zip() 函数。这样,zip() 就可以将这些行重新组合成列了。

示例:

python"># 定义一个矩阵
matrix = [[1, 2, 3], [4, 5, 6]]# 使用 zip() 进行转置
transposed_matrix = [list(row) for row in zip(*matrix)]print("原始矩阵:")
for row in matrix:print(row)
print("转置后的矩阵:")
for row in transposed_matrix:print(row)
'''
原始矩阵:
[1, 2, 3]
[4, 5, 6]
转置后的矩阵:
[1, 4]
[2, 5]
[3, 6]
'''


实战演练


C-翻之 https://ac.nowcoder.com/acm/contest/100671/C

在这里插入图片描述
在这里插入图片描述


这题思路同样非常关键,先来讲讲思路:

题目要求我们决定是否通过翻转某一行来最大化全为1的列数。
有点抽象,
干脆我们假设答案为多个:第 j 列 和若干其他符合条件的列
那么第 j 列肯定是全为1的列,其第 i 行必为1 ,没问题对吧
那么同时其它符合条件的列第 i 行也必为1
所以这些列可以说是同步变化的
又因为任意一行的翻转必然会影响其他列,故只有当两列的字符串完全相同时,才会同步变化
于是归纳为:符合条件的列为完全相同的列
所以就考虑由列组成的字符串中出现次数最多的为这个最大值,即ans
我们可以通过行列转置来得到这个列组成的字符串


思路清晰了,来写code吧

手动暴力转换发现超时

python">from collections import defaultdict
n, m = map(int, input().split())
a=[]
cnt=defaultdict(int)
for _ in range(n):a.append(input())for j in range(m):s = ""for i in range(n):s+=a[i][j]cnt[s]+=1
print(max(cnt.values()))

在这里插入图片描述

又不支持导入第三方库,怎么办?
那只能用它了 通过zip()实现

附上题解code:

python">from collections import defaultdictn, m = map(int, input().split())
a = [input() for _ in range(n)]
cnt = defaultdict(int)transposed_a = [row for row in zip(*a)]
for row in transposed_a:cnt[row] += 1
print(max(cnt.values()))


不了解 默认字典defaultdict 可点此进入详细讲解


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢


http://www.ppmy.cn/ops/154560.html

相关文章

【测试】开发模型和测试模型

一、初步认识测试 概念 测试是指使用人工或自动手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。它是对软件规格说明、软件设计和编码的最后复审,是软件质量保证的关键步骤。 软件测试就…

【pytorch 】miniconda python3.11 环境安装pytorch

ubuntu24.04 miniconda python3.11 环境安装pytorch 组件:langgraph本身不需要有一些模型是需要的:python3.11环境:报错ModuleNotFoundError: No module named ‘torchaudio’ ModuleNotFoundError: No module named ‘torchaudio’File "/root/miniconda3/envs/05_ep_…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现; 三.三、编写应用程序; 此文主要是实现应用的主要编码工作。 1、 分层; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示;Helper主要是链接UI和数据库操作的中间层;DAL为对数据库的操…

SpringBoot源码解析(八):Bean工厂接口体系

SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…

从零开始学习安时积分法(STM32实现程序)

在STM32微控制器上实现安时积分法(Coulomb Counting)来估算电池的SOC(State of Charge),需要完成以下几个步骤: 硬件配置: 使用STM32的ADC模块测量电池的电流。使用定时器模块进行时间积分。配置…

笔记本搭配显示器

笔记本:2022款拯救者Y9000P,显卡RTX3060,分辨率2560*1600,刷新率:165Hz,无DP1.4口 显示器:2024款R27Q,27存,分辨率2560*1600,刷新率:165Hz &…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的…

Databricks:统一的数据和 AI 平台

Databricks 是一家专注于大数据处理和分析的领先企业,其核心产品和服务基于 Apache Spark 构建,旨在简化和优化数据处理流程。以下是对 Databricks 的深度介绍: 1. 公司背景与核心理念 Databricks 成立于 2013 年,由七位来自加州…