어떻게 병합 2D 편에서는 파이썬으로 한 문자열을 가진 목록 Comprehension?

StackOverflow https://stackoverflow.com/questions/103844

  •  01-07-2019
  •  | 
  •  

문제

목록을 위해 이해 나을 것 같아 불투명한 블록 화강암의 것을 정규 표현식은 나를 위해.요 포인터입니다.

말 나는 2D 목록:

li = [[0,1,2],[3,4,5],[6,7,8]]

나는 다음과 같이 병합한 이 중 하나로 긴 목록

li2 = [0,1,2,3,4,5,6,7,8]

나 문자열로 구분 기호:

s = "0,1,2,3,4,5,6,7,8"

정말 나의하는 방법을 알고 두 가지 모두 수행합니다.

도움이 되었습니까?

해결책

그래서 다음과 같:

[ item for innerlist in outerlist for item in innerlist ]

는 직접 문자열로 구분 기호:

','.join(str(item) for innerlist in outerlist for item in innerlist)

Yes,의 순서에 대한'innerlist 에 outerlist'과'항목에 대해 innerlist'올바른 것입니다.도 불구하"본문의"루프의 시작에서 listcomp 의 순서는 중첩된 루프(고'면'절)는 여전히 동일 때 작성할 수 있습니다 loop out:

for innerlist in outerlist:
    for item in innerlist:
        ...

다른 팁

해:

li=[[0,1,2],[3,4,5],[6,7,8]]
li2 = [ y for x in li for y in x]

당신은 그것을 읽을 수 있는 다음과 같다:
나에게 목록의 모든 ys.
Ys 에서 온 xs.
Xs 에서 온 li.

을 지도하는 문자열:

','.join(map(str,li2))

거기에 몇 가지 선택이다.첫째,할 수 있습니다 그냥 새로 만들고 목록의 내용을 추가 각 목록다:

li2 = []
for sublist in li:
    li2.extend(sublist)

또는,사용할 수 있습니다 itertools 모듈 chain 기능 생산하고 반복 가능한 모두 포함하는 항목에서 여러 iterables:

import itertools
li2 = list(itertools.chain(*li))

만약 당신이 접근할 수 있습을 생성한 문자열을 만들지 않고 중간:목록

s = ",".join(itertools.chain(*li))

내가 좋아하는,그리고 가장 짧은 하나,이것은:

li2 = sum(li, [])

s = ','.join(li2)

편집:사 sumreduce,(감사 토마스생!)

그것을 일반 목록 중 하나를 사용:

  1. http://code.activestate.com/recipes/121294/
  2. http://code.activestate.com/recipes/363051/

그런 다음 join 그것에는 문자열을 사용합니다.

두 번째 하나,거기에는 내장 방법은 문자열이 그렇게 하도록 요청합니다.

>>> print ','.join(str(x) for x in li2)
"0,1,2,3,4,5,6,7,8"

을 위한 첫 번째 중 하나를 사용할 수 있습에 참 내의 이해를 목록:

>>> print ",".join([",".join(str(x) for x in li])
"0,1,2,3,4,5,6,7,8"

그러나 그것의 사용 itertools.평평:

>>> import itertools
>>> print itertools.flatten(li)
[0,1,2,3,4,5,6,7,8]
>>> print ",".join(str(x) for x in itertools.flatten(li))
"0,1,2,3,4,5,6,7,8"

N.B:itertools 모듈는 당신이 처리하는 데 도움으로 일반적인 작업을 반복자를 등록,튜플 또는 문자열을...그것은 편리하기 때문에 저장하지 않습의 복사본을 구조에서 작업하지만 과정 항목 중 하나에 의해 하나입니다.

편집:재미있는,나는 학습을 많이 가지 방법이 될 수 있습니다.누가 하나뿐이었는 좋은 방법이 그것을 할 수 있나요?

많은 방법이 이 문제입니다.나 Numpy의 도구들기 때문에 그것은 일반적으로 이미 수입된 나는 모든 일에는 않습니다.그러나 사용하지 않는 경우에는 Numpy 다른 용도로 이것은 아마 없이 좋은 방법입니다.

import numpy
li = [[0,1,2],[3,4,5],[6,7,8]]
li2=li[0] #first element of array to merge
i=1 
while i<len(li):
    li2=numpy.concatenate((li2,li[i]))
    i+=1
print li2

이 것 인쇄[0 1 2 3 4 5 6 7 8] 한 다음 변환할 수 있습니다 이것으로 귀하의 문자열이 너무입니다.

import itertools
itertools.flatten( li )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top