2014-06-20 47 views
2

我看到了this question,但它对我的问题没有什么帮助。将列表中的元素加入到Python中的新列表中

我有一个字符串列表,其中12个第一项是20个字节长(40个字符),而13'是19个字节(38个字符),并且这对于列表的其余部分是持续的任意大小(我正在解码没有给定大小的音频记录)。

for packet in adpcm_packets[0:15]: 
    print packet 

输出:

0000000FFF77F7FFF2A1412F4B8058A891982070 
F1885C08883C7A880018980B7A50E24AA8004E4C 
5D38103F3C910810009941B91088F7D509008980 
009980809F7C28008880B7B935A88A0208118C3B 
C251881F4C00B1408088A1398007F1980259C800 
A108892278E879B383F04B0B50188191F1888189 
A9608080980808080E7E40080989080018A860D3 
F4C800001C7A100810C90B8302118980FC508923 
B888D782BD8283B802902902A7CB589008802080 
90097F3A8A061C81880B7B40A9249A008E022E6D 
20B22D923E9690A80121AB97E4A8800013D5E5B8 
490992228F02A14AC00A419990971B2888009988 
8A2698289A70C00B039A3A74D2098AE7B18828 
3F1C5201D3F1A000811081190988808080808008 
0808800880080808800080008881880919880A10 

现在,我要一个新的列表,其中每个元件包含13个数据包,即12 * 40 + 1 * 38 = 518个字符(259个字节)。

blocks.append(adpcm_packets[0]) 
    for packet in adpcm_packets[1:13]: 
     blocks[0] += packet 

然后我坚持要如何做到这一点与列表的其余部分。我怎样才能做到这一点?

+0

要清楚:你有一个字符串列表,你想要一个字符串列表,其中每个字符串是518个字符,就好像你的字符串列表是一个长字符串? – timgeb

+0

当你做每个元素包含13个数据包的列表时,这是每个元素之间的区别?你用不同的方式构建每个元素? – AlvaroAV

+0

@timgeb如果我的初始清单是肯定的。 Liarez的每个元素都是一个32ms的音频片段 – chwi

回答

2

不完全确定我明白你的问题,但它是这样的东西你正在寻找?

blocks = ["".join(adpcm_packets[i:i+13]) for i in range(0, len(adpcm_packets), 13)] 
+0

这就是我正在寻找的东西。谢谢! – chwi

+0

@Wilhelmsen没问题:) –

0

链接问题没有帮助你的原因是你的问题不是以任何方式与“加入”列表有关,而是与分区列表。你只是想把你的列表分成13个元素的单独列表。 This question有一些很好的解决方案。

1

据我了解你的问题,你有字符串列表,你想要一个新的字符串列表,其中每个字符串是指定的块长度。一个简单的方法是将join列表放入一个单独的字符串中,然后再将其分解。演示:

>>> 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?'] 

更改chunk到518,你应该是好去。如果我误解了你的规格,请留下评论。

0

最简单的就是用递归,这是比较容易理解...

def f(l): 
    if l==[]: return [] 
    else: return [ ''.join(l[:13]) ] + f(l[13:]) 

蟒蛇处理列表的方式可以让你不必担心l[13:]l[:13]一部分时, len(l) < 13

请注意,这是潜在尾递归。不幸的是,我不确定这是否会在Python解释器中真正实现尾递归,但大多数现代编译器都能够自动为您做。在Python中,你将不得不调用你自己的迭代器方法,这对于这样一段简单的代码是一种矫枉过正。

相关问题