LeetCode 867. Transpose Matrix——python一行代码解决

问题来源:867. Transpose Matrix

问题描述:

Given a matrix A, return the transpose of A.

The transpose of a matrix is the matrix flipped over it's main diagonal, switching the row and column indices of the matrix.

Example 1:

Input: [[1,2,3],[4,5,6],[7,8,9]]
Output: [[1,4,7],[2,5,8],[3,6,9]]

解决代码:

class Solution:
	def transpose(self, A):
		"""
		:type A: List[List[int]]
		:rtype: List[List[int]]
		"""
		
		return [[A[i][j] for i in range(len(A))] for j in range(len(A[0]))]

利用了python 列表自解析功能,嵌套进两个for循环,充分利用矩阵转置对应元素位置的特点

<think>嗯,用户问的是关于Python蓝桥杯列表相关的题目。首先,我需要确定用户的需求。蓝桥杯的列表题目通常涉及基础操作、算法应用,比如排序、查找、动态规划等。用户可能是准备参赛的学生,需要了解常见的题型和解决方法。 首先,我应该回忆蓝桥杯历届题目中列表相关的考点。比如,列表的遍历、元素操作、子列表处理、二维数组(矩阵)问题,以及结合排序、贪心、动态规划等算法的情况。常见的题目类型可能有元素删除、统计、最值、旋转矩阵、子列表和等。 接下来,我需要组织这些内容,分点说明,每个点给出例子和解决思路。比如,元素删除可以用列表生成式或filter函数;统计最值可能需要遍历并比较;二维数组问题需要嵌套循环处理。动态规划的例子,像最长递增子序列,可能需要用动态规划的思路,时间复杂度优化是关键。 要注意用户可能需要具体的代码示例,所以每个知识点要附上代码片段。比如,删除偶数可以用列表推导式,矩阵转置可以用zip(*matrix)等。同时,要提醒常见的错误,比如循环中修改列表导致的问题,或者浅拷贝深拷贝的区别。 还要考虑用户可能的疑惑点,比如如何处理复杂的问题,或者如何优化代码效率。例如,在动态规划问题中,状态转移方程的设计,或者空间复杂度的优化方法。可能需要给出不同解法的对比,说明优缺点。 最后,总结部分需要强调练习的重要性,推荐刷题平台,并提醒注意Python列表的特性,如可变性、浅拷贝等问题。这样用户能有全面的了解,并知道如何进一步准备。</think>以下是关于Python蓝桥杯列表中相关题目的解析框架及典型例题分析,帮助您系统掌握考点: --- ### 一、基础操作类题目 **核心考点**:列表增删改查、切片、遍历、内置函数应用 **典型例题**: 1. **删除特定元素** ```python # 删除列表中所有偶数 lst = [1, 2, 3, 4, 5] new_lst = [x for x in lst if x % 2 != 0] # 列表推导式 print(new_lst) # 输出 [1, 3, 5] ``` 2. **统计最大值位置** ```python lst = [5, 3, 9, 2, 7] max_val = max(lst) max_index = lst.index(max_val) print(f"最大值{max_val}出现在索引{max_index}") # 最大值9出现在索引2 ``` --- ### 二、二维列表(矩阵)问题 **核心考点**:矩阵遍历、旋转、转置、对角线操作 **典型例题**: 1. **矩阵转置** ```python matrix = [[1, 2, 3], [4, 5, 6]] transpose = list(zip(*matrix)) # 使用zip解包 print(transpose) # 输出 [(1,4), (2,5), (3,6)] ``` 2. **顺时针旋转90度** ```python def rotate(matrix): return [list(row[::-1]) for row in zip(*matrix)] ``` --- ### 三、算法结合类题目 **核心考点**:排序、双指针、动态规划、滑动窗口 **典型例题**: 1. **最长递增子序列(动态规划)** ```python def lengthOfLIS(nums): dp = [1] * len(nums) for i in range(len(nums)): for j in range(i): if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j]+1) return max(dp) ``` 2. **三数之和(双指针)** ```python def threeSum(nums): nums.sort() res = [] for i in range(len(nums)-2): if i > 0 and nums[i] == nums[i-1]: continue l, r = i+1, len(nums)-1 while l < r: s = nums[i] + nums[l] + nums[r] if s < 0: l +=1 elif s > 0: r -=1 else: res.append([nums[i], nums[l], nums[r]]) while l < r and nums[l] == nums[l+1]: l +=1 while l < r and nums[r] == nums[r-1]: r -=1 l +=1; r -=1 return res ``` --- ### 四、易错点提醒 1. **循环中修改列表长度** ```python # 错误方式:删除元素时直接遍历原列表 lst = [1,2,3,4] for num in lst: # 会导致跳过元素 if num % 2 == 0: lst.remove(num) # 正确方式:遍历副本或新建列表 lst = [num for num in lst if num % 2 != 0] ``` 2. **浅拷贝问题** ```python a = [[0]*3]*3 # 错误!创建的是引用副本 a[0][0] = 1 # 所有子列表首元素都会被修改 # 正确创建二维列表 a = [[0 for _ in range(3)] for _ in range(3)] ``` --- ### 五、备考建议 1. **重点掌握**:列表推导式、`enumerate()`、`zip()`、切片的高级用法 2. **刷题平台**:蓝桥官网练习系统、LeetCode列表专题 3. **复杂度优化**:注意时间复杂度要求,学会用哈希表(字典)优化查找 通过大量练习典型题目(如元素操作、子列表和、矩阵变换、动态规划等),可以显著提升解决列表相关问题的能力。建议结合真题进行限时训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值