2012-06-25 3 views
0

지도에서 루프를 만들고 싶습니다. 내 코드는 다음과 같습니다.파이썬 맵에서 루프를 수행하는 방법은 무엇입니까?

for (abcID,bbbID) in map(abcIdList,bbbIdList): 
     buildXml(abcID,bbbID) 

이 작업을 수행하려면 어떻게해야합니까?

+0

무엇을하고 싶습니까? 이제 어떻게합니까? –

+2

'map()'이 무엇을해야하는지 이해하고 있습니까? – msvalkon

+0

어쩌면 늦었지만지도와 목록에 대한 간단한 자습서가 있습니다. http://www.dreamsyssoft.com/python-scripting-tutorial/lists-maps-tutorial.php –

답변

2

당신은 섞어 ... 대신 zip() 싶은 생각 map()zip() 또는 dict().

map은 반복 가능 객체에서 작동하며 두 개의 인수, 함수와 반복 가능합니다 :

>>> def addOne(x): 
...  return x+1 
... 
>>> l = [1, 2, 3, 4] 
>>> print(map(addOne, l)) 
[2, 3, 4, 5] 

그래서는 시퀀스의 각 요소에 대한 첫 번째 인수로 전달 된 함수를 적용하고 (목록으로 메모를 새로운 순서를 반환 이 동작은 목록 대신 iterable을 얻는 python3에서 다름).

zip() 대신 원하는 것을 수행합니다. 이 반복 가능 객체 인해 임의의 양을 취하여 하나의 튜플 각각의 반복 공정을 함께 병합 :

>>> l1, l2 = [1, 2, 3, 4], [5, 6, 7, 8] 
>>> print(zip(l1, l2)) 
[(1, 5), (2, 6), (3, 7), (4, 8)] 

가 다시, 결과 값이 python2의 목록 python3의 반복기이다. 당신은 당신의 질문에서했던 것처럼 일반적인 for 루프를 사용하여 반복 할 수 있습니다. 그러나

>>> d = dict(zip(l1, l2)) 
>>> d[1] 
5 
>>> d 
{1: 5, 2: 6, 3: 7, 4: 8} 

, 직접의 키 - 값 쌍을 반복 할 수 없습니다 이러한 압축 반복자의 당신은 또한 (또한 값 항목을 매핑 등의 지도를 호출 할 수있다)을 dict 만들 수 dicts : 우리가 dict 아닌 int 통과로이, 다소 모호한 오류 메시지입니다

>>> for key, value in d: 
... print(key) 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 

! 도대체 어디서 오는거야 int?

>>> list(d) 
[1, 2, 3, 4] 

을하지만 우리는 우리의 가치에 unpacking을 할 파이썬을 지시하십시오 dict 반복 할 때 기본적으로, 하나는 키 반복됩니다. 그래서 그것은 분명히 작동하지 않는 하나의 int에서 두 개의 값을 얻으려고 시도합니다. 그 점에서 오류는 합리적인 것처럼 보입니다. 그래서 사람이 사용하는 키 - 값 쌍을 반복합니다 :

>>> for key, value in d.items(): 
... print(key, value) 
... 
1 5 
2 6 
3 7 
4 8 

(출력은 __future__에서 print_function 수입 여부에 따라 다를 수 있습니다). 큰 dict와 python2의 경우, iteritems()items()보다 빠릅니다. items()은 모든 키 - 값 쌍을 먼저 목록에 넣고, iteritems()은 지연 반복자 만 만듭니다. python3에서 items()은 이미 이와 비슷한 작업을 수행합니다.

상황을 조금 분명히 밝히기를 바랍니다.

+0

고마워요, 조나스. 나는 당신의 대답을 받아 들였습니다. 좋은 하루 되세요! – Nancy

4

어, 나는

>>> zip((1, 2), ('a', 'b')) 
[(1, 'a'), (2, 'b')] 
+0

나는 대답을 받아 들일 것입니다. 그것은 내 문제를 해결합니다.Ignacio, 고마워. 좋은 하루 되세요 !! :-) (시스템은 7 분 안에 이것을 받아들이라고 말했고 (당장은 그렇지 않다.) 왜 그런지 모르겠다. 나는 그것을 할 것이다 :-D) – Nancy

+1

'map (None, (1,2), ('a', 'b'))'같은 방식으로 작동합니다 (파이썬 2.x). – astynax

관련 문제