2014-06-20 2 views
2

나는 this question을 보았지만 내 문제는별로 도움이되지 못했습니다.목록의 요소를 파이썬의 새로운 목록에 연결하기

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 

지금, I는 각 요소 (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.

잠재적으로 꼬리 재귀입니다. 불행히도 이것이 파이썬 인터프리터에서 정말로 꼬리 재귀가 될지 확신 할 수 없지만 대부분의 현대 컴파일러는 자동으로 그렇게 할 수 있습니다. 파이썬에서는 자신 만의 이터레이터 메소드를 호출해야합니다.이 메소드는 이와 같은 간단한 코드에 과도한 부담이됩니다.

관련 문제