2016-10-31 2 views
0

특정 문자열이 주어진 경우 my 함수는 해당 문자열의 모든 문자를 사용하여 목록의 목록을 만들어야합니다. 이 함수는 문자열에 \n이있을 때마다 새 목록을 시작해야합니다.문자열에서 목록 목록 구성

예 : build_lst("\n....\n.B.d\n")은 문자열에 8자를 포함했기 때문에 [['.','.','.','.'],['.','B','.','d']] 목록의 목록을 반환해야합니다. 그것은 문자가 문자열에 나타나는 순서대로 목록의 목록을 만들고 언급 한대로 \n은 주 목록 내의 여러 개별 목록을 나눕니다.

내 코드는 짧지 만 몇 줄의 코드만으로도이 코드를 완성 할 수 있다고 생각합니다.

def build_lst(s): 

my_lst = s.split('\n') 
[map(int) for x in my_lst] 
+0

시도 '[리스트 (X)를 X의 "\ n .... \ NBD \ n"의 .strip() 분할 ("\ n")를.]'. – Abdou

+0

왜'map (int)'인가? 그것이 예상 출력과 어떤 관련이 있습니까? – njzk2

+0

@ njzk2 질문을하기 전에이 작업을 수행하는 방법에 대한 연구를하고 있었고 그것이 어떻게 수행 된 것 같았는지 정확히 알지 못했습니다. 이제 Int로 변환 할 필요가 없다는 것을 알았습니다. Juanpa.arrivillaga의 솔루션이 완벽하게 작동하여 최상의 대답으로 자신의 대답을 선택했습니다. – n00bprogrammer22

답변

1

내가 당신이 원하는 모든 믿는 :

>>> s = "\n....\n.B.d\n" 
>>> list(map(list,s.strip().split('\n'))) 
[['.', '.', '.', '.'], ['.', 'B', '.', 'd']] 

파이썬 2에서, 당신이 밖으로 떠날 수 내가 곧 정상 궤도에 오전 또는 다른 전략이 더 나은 경우

코드 경우 확실하지 외부 전화는 list으로 전화하고 map으로 남겨 두십시오. map은 파이썬 3에서와 같이 느리게하는 대신 열정적으로 평가됩니다.

+0

솔루션이 완벽하게 작동 해 주셔서 감사합니다. new_lst를 솔루션의리스트 (map (list, s.strip(). split ('\ n')))와 동일하게 설정 한 다음 python이 new_lst를 반환하도록 지시하고 올바르게 작동합니다. – n00bprogrammer22

0

A출력을 구성 할 때 빈 입력 라인은 생략한다

[ list(line) for line in s.split('\n') ] 

경우, 지능형리스트에 조건을 추가합니다 :

[ list(line) for line in s.split('\n') if line ] 

... 선도적 인 경우 68,364,갈 멋진, 유지 보수 방법 후행 공백은 무시해야

[ list(line.strip()) for line in s.split('\n') if line.strip() ] 
+0

'\ n' '\ n'을 (를) 쪼개고 있다면? – njzk2

+0

하하! 예, 그것은 텍스트 파일에서 읽은 행을 반복하는 습관이었습니다. 편집 됨. – jez