多维list展开&&统计多维list中元素出现频率

多维list展开&&统计多维list中元素出现频率

一、多维list 展开成 一维list

1、定义展开方法

8种方法将list展平为一层(如果是np.array()数据形式直接arr.reshape(-1,1)就OK)

import functools
import itertools
import numpy
import operator
import perfplot
from collections import Iterable  # or from collections.abc import Iterable
from iteration_utilities import deepflatten

#使用两次for循环
def forfor(a):
    return [item for sublist in a for item in sublist]

#通过sum
def sum_brackets(a):
    return sum(a, [])

#使用functools內建模块
def functools_reduce(a):
    return functools.reduce(operator.concat, a)

#使用itertools內建模块
def itertools_chain(a):
    return list(itertools.chain.from_iterable(a))

#使用numpy
def numpy_flat(a):
    return list(numpy.array(a).flat)

#使用numpy
def numpy_concatenate(a):
    return list(numpy.concatenate(a))

#自定义函数
def flatten(items):
    """Yield items from any nested iterable; see REF."""
    for x in items:
        if isinstance(x, Iterable) and not isinstance(x, (str, bytes)):
            yield from flatten(x)
        else:
            yield x

def pylangs_flatten(a):
    return list(flatten(a))

#使用库iteration_utilities
def iteration_utilities_deepflatten(a):
    return list(deepflatten(a, depth=1))

2、各方法基准时间测试

import matplotlib.pyplot as plt
from simple_benchmark import benchmark

#基准测试
b = benchmark(
    [forfor, sum_brackets, functools_reduce, itertools_chain,numpy_flat, numpy_concatenate, pylangs_flatten,iteration_utilities_deepflatten],
    arguments={2**i: [[0]*5]*(2**i) for i in range(1, 13)},
    argument_name='number of inner lists'
)

#显示测试结果
plt.subplots(1,1,figsize=(15,10))
b.plot()
plt.legend(loc = 'upper left')
plt.show()

消耗时间对比

参考资料

[Python中多层List展平为一层]

二、统计出现频率

利用Counter 按照降序排好

list1 = [1,2,3,1,1,4]
sorted_x = sorted(Counter(list1.items(), key=lambda x: x[1], reverse=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值