python list等分并从等分的子集中随机选取一个数
有些时候我们需要从视频序列中均匀的随机采样,我们可以每隔x步进行一次采样,这就要求对一个list每隔x步进行一次截取,再从截取到的不同的子集中随机选取一个数就是我们平均采样的帧的idx。
importrandom defsplit(a,n): k,m=divmod(len(a),n) return[a[i*k+min(i,m):(i+1)*k+min(i+1,m)]foriinlist(range(n))] list_split=split(list(range(15)),3) print(list_split) tmp=[random.choice(i)foriinlist_split] print(tmp)
结果:
list_split====>
[[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]]tmp====>
[0,6,12]
pythonlist平均分割等分
应用场景:根据线程数,分割任务列表;
####功能:将list对象N等分 defdiv_list(ls,n): ifnotisinstance(ls,list)ornotisinstance(n,int): return[] ls_len=len(ls) ifn<=0or0==ls_len: return[] ifn>ls_len: return[] elifn==ls_len: return[[i]foriinls] else: j=ls_len/n k=ls_len%n ###j,j,j,...(前面有n-1个j),j+k #步长j,次数n-1 ls_return=[] foriinxrange(0,(n-1)*j,j): ls_return.append(ls[i:i+j]) #算上末尾的j+k ls_return.append(ls[(n-1)*j:]) returnls_return if0: printdiv_list(3,3) printdiv_list([3],'3') printdiv_list([3],-1) printdiv_list([],2) printdiv_list([3],2) printdiv_list([3,4,5,6],4) printdiv_list([3,4,5,6,7,8,9,10,11,12,13,14,15],3)
到此这篇关于pythonlist等分并从等分的子集中随机选取一个数的文章就介绍到这了,更多相关pythonlist等分内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!