在Python中将列表中的元素连接到新列表
我看到了,但这对解决我的问题没有多大帮助 我有一个字符串列表,其中前12个项的长度为20字节(40个字符),第13个项的长度为19字节(38个字符),其余部分的长度为任意大小(我正在解码没有给定大小的音频记录) 输出:在Python中将列表中的元素连接到新列表,python,list,Python,List,我看到了,但这对解决我的问题没有多大帮助 我有一个字符串列表,其中前12个项的长度为20字节(40个字符),第13个项的长度为19字节(38个字符),其余部分的长度为任意大小(我正在解码没有给定大小的音频记录) 输出: 0000000FFF77F7FFF2A1412F4B8058A891982070 F1885C08883C7A880018980B7A50E24AA8004E4C 5D38103F3C910810009941B91088F7D509008980 009980809F7C28008
0000000FFF77F7FFF2A1412F4B8058A891982070
F1885C08883C7A880018980B7A50E24AA8004E4C
5D38103F3C910810009941B91088F7D509008980
009980809F7C28008880B7B935A88A0208118C3B
C251881F4C00B1408088A1398007F1980259C800
A108892278E879B383F04B0B50188191F1888189
A9608080980808080E7E40080989080018A860D3
F4C800001C7A100810C90B8302118980FC508923
B888D782BD8283B802902902A7CB589008802080
90097F3A8A061C81880B7B40A9249A008E022E6D
20B22D923E9690A80121AB97E4A8800013D5E5B8
490992228F02A14AC00A419990971B2888009988
8A2698289A70C00B039A3A74D2098AE7B18828
3F1C5201D3F1A000811081190988808080808008
0808800880080808800080008881880919880A10
现在,我想要一个新列表,其中每个元素包含13个数据包,即12*40+1*38=518个字符(259字节)
然后我被困在了如何处理列表中的其他部分。我怎样才能做到这一点 链接问题对您没有帮助的原因是,您的问题与“加入”列表无关,而是与列表分区有关。您只需要将列表划分为单独的列表,每个列表包含13个元素。有一些很好的解决方案。据我所知,您有一个字符串列表,您需要一个新的字符串列表,其中每个字符串都有一个指定的块长度。一种简单的方法是
将列表连接成一个字符串,然后再次将其破解。演示:
>>> lst = ['hello', 'world', 'how', 'are', 'you?']
>>> mystr = ''.join(lst)
>>> chunk = 5
>>> newlst = [mystr[i:i+chunk] for i in range(0,len(mystr),chunk)]
>>> newlst
['hello', 'world', 'howar', 'eyou?']
将您的区块
更改为518,您就可以出发了。如果我误解了您的说明,请留下评论。我不完全确定我是否理解您的问题,但您要找的是这样的东西吗
blocks = ["".join(adpcm_packets[i:i+13]) for i in range(0, len(adpcm_packets), 13)]
最简单的事情是使用递归,这相对容易理解
def f(l):
if l==[]: return []
else: return [ ''.join(l[:13]) ] + f( l[13:])
Pythons处理列表的方式允许您不必担心l[13:][/code>和l[:13][/code>部分的len(l)<13
注意,这可能是尾部递归的。不幸的是,我不确定在Python解释器中这是否是真正的尾部递归,但大多数现代编译器都能够自动为您做到这一点。在Python中,您必须调用自己的迭代器方法,对于这样一段简单的代码来说,这有点过分了 需要澄清的是:您有一个字符串列表,您想要一个字符串列表,其中每个字符串为518个字符,就好像您的字符串列表是一个长字符串一样?当您创建一个列表,其中每个元素包含13个数据包时,每个元素之间的差异是多少?你以不同的方式构建每个元素?@timgeb如果我最初的列表是这样的话。每个元素都是一个32ms的音频片段,这正是我所寻找的。谢谢大家!@威廉森:没问题:)
blocks = ["".join(adpcm_packets[i:i+13]) for i in range(0, len(adpcm_packets), 13)]
def f(l):
if l==[]: return []
else: return [ ''.join(l[:13]) ] + f( l[13:])