版权声明:本文为博主原创文章,如有转载请标注来源。 https://blog.csdn.net/shengchaohua163/article/details/79555144
学习Python中,在此记录一些Python数据结构中的小技巧,不定时进行更新…
1. 统计list中所有元素的频率
题目描述:统计list中所有元素的频率。
解题方法:
nums = [1,2,3,4,5,4,3,2,1]
# 一般方法
numFreq = {}
for num in nums:
if num not in numFreq:
numFreq[num] = nums.count(num)
# collections工具箱实现
import collections
numFreq = collections.Counter(nums)
2. 向dict添加元素
题目描述:已知key和value,但是不知道dict中是否存在该key。如果存在,dict不进行更新;反之,则进行更新。
解题方法:
方法 | 描述 |
---|---|
dict.setdefault(key, defaultValue) | 如果key存在,返回对应的value;如果不存在,则向字典中插入key-defaultvalue并返回defaultvalue,defaultvalue默认为None |
myDict = {1:1, 2:2, 3,3}
key, value = 3, 4
# 一般方法
if key not in myDict:
myDict[key] = value
# setdefault方法
myDict.setdefault(key, value)
3. 把二维的list进行拉直
题目描述:如何把[[1,2,3],[4,5,6]]变成[1,2,3,4,5,6]。
题目来源:知乎、Leetcode
解题方法:以下两个方法要求一维元素都是list,不适用[1, [2,3,4]]这种
nums = [[1,2,3],[4,5,6]]
# 一般方法
flattenNums = [n for item in nums for num in item]
# reduce方法
from functools import reduce
flattenNums = reduce(lambda x,y: x+y, nums)
# sum方法
flattenNums = sum(nums, [])
4. 把基于二维list的矩阵进行转置
题目描述:用二维list表示一个矩阵,如何进行转置。来自The Python Tutorial
解题方法:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
# 暴力方法
transposed = []
for i in range(4):
# the following 3 lines implement the nested listcomp
transposed_row = []
for row in matrix:
transposed_row.append(row[i])
transposed.append(transposed_row)
# 暴力方法简化版
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
# 列表推导式
transposed = [[row[i] for row in matrix] for i in range(4)]
# zip + 参数列表
transposed = list(zip(*matrix)