Python数据结构中有趣的小技巧

版权声明:本文为博主原创文章,如有转载请标注来源。 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)

猜你喜欢

转载自blog.csdn.net/shengchaohua163/article/details/79555144