2013-07-05 2 views
1

다음은 예제입니다.목록을 연결하고 접합 된 섹션으로 새 목록을 만드는 방법은 무엇입니까?

파일의 문자열은 4;4;4;8;4;4;4;9;9;4;4입니다.

I 출력에 싶습니다 :이 예에서

4;4;4 
8 
4;4;4 
9 
9 
4;4 

에게 내가 여기 파이썬 라이브러리와 다른 질문을보고 시도 4보다 큰 숫자가 될 것입니다 스플 라이스 할시기를 결정하는 한계를. 내 추측은 다음과 관련이 있습니다.

listA = [] 
listB = [] 
for i in line: 
    listA.append(i) 

for item in listA: 
    if int(item) > 4: 
     listB.append(item) 
    else: 
     item = item 

print(listA) 
print(listB) 

더 효율적이고 빠른 방법이 있습니까? 나는 거기에 있다고 확신하지만 파이썬에 익숙하지 않고 도움을 주셔서 감사합니다!

+0

파일의 수천 줄에 대해이 작업을 수행하므로 목록을 생성하는 루프도 훌륭합니다! – user2555098

+1

서식을 주신 Martijn에게 감사드립니다. – user2555098

답변

1

사용 itertools.groupby :

from itertools import groupby 

for key, group in groupby(line.split(';'), key=lambda i: int(i) > 4): 
    if key: 
     for i in group: 
      print(i) 
    else: 
     print(';'.join(group)) 

데모 :

>>> for key, group in groupby(line.split(';'), key=lambda i: int(i) > 4): 
...  if key: 
...   for i in group: 
...    print(i) 
...  else: 
...   print(';'.join(group)) 
... 
4;4;4 
8 
4;4;4 
9 
9 
4;4 

핵심에 의한 groupby 유틸리티 기능 그룹 서열; 여기서는 값이 4보다 크거나 같지 않음. 각 반복은 우리에게 하나 또는 다른 값의 연속을 제공합니다. 현재 그룹 의 값이 인 경우 실제로는 더 큽니다. 그렇지 않으면 세미콜론으로 하나의 문자열로 다시 결합됩니다.

+0

예제를'line = 4; 4; 4; 5; 4; 4 '로 실행할 때'int '객체가 반복 가능하지 않은 Type_error가 있다고합니다. 같은 줄을'line = '4; 4; 4; 5; 4; 4' '라고 쓰면 int() 밑이 무효 인 것을 알 수있다. 나는 이것을 ";"라고한다. 당신이 무슨 생각을하는지 제게 알려주세요. Thanks @Martijn Pieters – user2555098

+0

또한 위의 답변이 실제로 의미하는 바에 대해 다소 혼란 스럽습니다. 설명은 크게 감사하겠습니다. – user2555098

+0

OP의 예에서 '9'가 분리 된 그룹이라고 기대하는 동안 이것은 '9; 9'를 유지합니다 ... –

관련 문제