2014-06-20 1 views
0

안녕하세요. 목록의 하위 목록을 생성하려고합니다.
내가 4의 길이 그러나 첫 번째 요소에 하위 목록에서 그들을 분할 할 l = [1,2,3,4,5,6,7,8,9,10,11,12]python은 오프셋 및 조건을 사용하여 하위 목록을 생성합니다.

이전 목록에서 마지막 요소와 같은 동일하며 같은 나는 그것을 말했다 : 예를 들어, 나는 다음과 같은 목록을했습니다 다음과 같이하십시오.

l1 = [1,2,3,4] 
l2 = [4,5,6,7] 
l3 = [7,8,9,10] 
l4 = [10, 11, 12] <-- should be ignored 

누군가가 아이디어를 가지고 있습니까?! 나는 발전기에 대해 생각하고 있지만 확실히는 모르겠다.

+3

. 보여! –

답변

3

간단하지만 유연한 발전기 구현 :

을3210
def overlapping_sublists(l, n, overlap=1, start=0):   
    while start <= len(l) - n: 
     yield l[start:start+n] 
     start += n - overlap 

사용 예제 : 당신은 확실히 뭔가를 시도

>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
>>> list(overlapping_sublists(l, 4)) 
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]] 
>>> list(overlapping_sublists(l, 4, 2, 3)) 
[[4, 5, 6, 7], [6, 7, 8, 9], [8, 9, 10, 11]] 
3
print([l[i:i+4] for i in range(0, len(l), 3)]) 

출력 : 길이 4

[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10], [10, 11, 12]] 

오직 하위 목록 :

print([m for m in [l[i:i+4] for i in range(0, len(l), 3)] if len(m) == 4]) 

출력 :

[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]] 

사용하는 발전기 :

,617,
for n in (m for m in (l[i:i+4] for i in range(0, len(l), 3)) if len(m) == 4): 
    print(n) 

출력 :

[1, 2, 3, 4] 
[4, 5, 6, 7] 
[7, 8, 9, 10] 
4
a = [] 
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
for i in range(0, len(l)-3, 3): 
    a.append(l[i:i+4]) 

a = [[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]

을 줄 것이다 또는 지능형리스트로 사용할 수 있습니다

[l[i:i+4] for i in range(0, len(l)-3, 3)] 
+1

그건 발전기가 아니라 목록의 이해입니다. –

+0

@tobias_k'''를'(''로 변경하면 생성자 표현이됩니다.) –

+0

@tobias_k, 건배, 나는 올바른 방법으로 이름을 얻지 못한다. – Holloway

관련 문제