문제

동일한 구조의 목록을 생성하기 위해 Python에 중첩 된 목록을 매핑하는 데 사용하는 다음 코드가 있습니다.

>>> nested_list = [['Hello', 'World'], ['Goodbye', 'World']]
>>> [map(str.upper, x) for x in nested_list]
[['HELLO', 'WORLD'], ['GOODBYE', 'WORLD']]

맵 함수를 사용하지 않고 목록 이해만으로 수행 할 수 있습니까?

도움이 되었습니까?

해결책

중첩 목록의 경우 중첩 된 목록 이해를 사용할 수 있습니다.

nested_list = [[s.upper() for s in xs] for xs in nested_list]

개인적으로 나는 찾는다 map 이 상황에서 깨끗해지면 거의 항상 목록 이해력을 선호합니다. 그래서 그것은 실제로 당신의 전화입니다. 어느 쪽이든 작동하기 때문입니다.

다른 팁

파이썬의 선을 기억하십시오.

일반적으로 둘 이상이있을 것입니다 몇몇의 - 명백한 방법. **

** 참고 : 정확성을 위해 편집되었습니다.

어쨌든, 나는지도를 선호합니다.

from functools import partial
nested_list = map( partial(map, str.upper), nested_list )

지도는 확실히 당신이 원하는 것을하는 훨씬 깨끗한 방법입니다. 그래도 목록 이해력을 중첩 할 수 있습니다.

[[ix.upper() for ix in x] for x in nested_list]

다음은 해결책입니다 임의 깊이가있는 중첩 목록:

def map_nlist(nlist=nlist,fun=lambda x: x*2):
    new_list=[]
    for i in range(len(nlist)):
        if isinstance(nlist[i],list):
            new_list += [map_nlist(nlist[i],fun)]
        else:
            new_list += [fun(nlist[i])]
    return new_list

당신은 대문자를 모두 나열하고 싶어요.

In [26]: nested_list = [['Hello', 'World'], ['Goodbye', [['World']]]]
In [27]: map_nlist(nested_list,fun=str.upper)
Out[27]: [['HELLO', 'WORLD'], ['GOODBYE', [['WORLD']]]]

그리고 더 중요한 것은이 재귀 기능이 이것보다 더 많은 일을 할 수 있습니다!

나는 Python을 처음 접하고 자유롭게 토론하십시오!

다른 포스터는 답을 주었지만, 기능적 구조물 주위에 머리를 감싸는 데 어려움을 겪을 때마다 자존심을 삼키고 명시 적으로 최적이 아닌 방법 및/또는 물체로 반복을 철자합니다. 발전기로 끝나고 싶다고 말했습니다.

for xs in n_l:
    def doUpper(l):
        for x in l:
            yield x.upper()
    yield doUpper(xs)

for xs in n_l:
    yield (x.upper() for x in xs)

((x.upper() for x in xs) for xs in n_l)

때로는 외형 버전 중 하나를 유지하는 것이 더 깨끗합니다. 저에게는지도와 축소가 때때로 더 명확하게 만들지 만 파이썬 관용구는 다른 사람들에게 더 분명 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top