2013-08-28 5 views
1

사용자가 만든 함수를 사용하여 목록의 모든 요소를 ​​인쇄하려고합니다. 내가하고 싶은 것을목록 요소 및 색인 반환

y = [1,2,3] 
def ash(list1): 
for x in range(len(list)): 
    return list[x],x 

는 인덱스를 사용하여 목록에있는 모든 값을 반환하지만, 내가 얻을 모두가 하나의 element.I이 요소가 인쇄하지만 반환하지 얻을 수있다.

답변

2

enumerate(list) 당신이 찾고있는 것입니다. (see doc). 또한, 함수를 호출 할 때 return를 호출하는 것은 당신에게 목록의 첫 번째 값을 줄 것이다, 당신이 여기에 원하는 것은 아마 yield statement입니다 : 이것은 당신이 변환해야하는 발전기 개체를 반환합니다

def ash(list): 

    for i,item in enumerate(list): 
    yield item,i 

if __name__ == '__main__': 

    y = [1,2,3] 

    ys_with_indices = list(ash(y)) 
    print ys_with_indices 

하는 것으로 목록에서 list()를 호출하여 목록을 만듭니다. 또는 개별 값을 추가하는 일반 목록을 사용하면됩니다.

def ash(list): 

    items_with_indices = [] 

    for i,item in enumerate(list): 
    items_with_indices.append((item,i)) 

    return items_with_indices 

if __name__ == '__main__': 

    y = [1,2,3] 

    ys_with_indices = ash(y) 
    print ys_with_indices 
+0

입니다. 이는 값과 색인을 시퀀스에서 가져 오는 더 좋은 방법이지만 실제 문제는 해결되지 않습니다. – delnan

+0

좋아, 나는 발전기에서 목록을 만드는 방법과 일반 목록을 사용하여 대안 버전을 보여주는 예제를 추가했습니다. – ThePhysicist

+0

-1'list'를 변수 이름으로 사용합니다. 이해력을 사용하는 대신 목록에 추가. – Marcin

5

매우 첫 번째 반복으로 돌아갑니다. 오히려, 함수에리스트를 만들고 그리스트에 모든 튜플을 추가하고 마지막으로 그리스트를 반환해야합니다.

return [(elem, x) for x, elem in enumerate(list1)] 

이전을 : 더 나은 당신은 단순히 목록 이해를 사용할 수

def ash(list1): 
    new_list = [] 
    for x, elem in enumerate(list1): 
     new_list.append((elem,x)) 
    return new_list 

을 또는 :

그리고 지수와 요소 모두를 얻기를위한

, 당신은 enumerate()을 사용할 수 있습니다 두 가지 방법으로 목록을 메모리에 만듭니다. 코드와

def ash(list1): 
    for x, elem in enumerate(list1): 
     yield elem, x 
+2

그건 끔찍한 방법 이거야. – Marcin

+0

@Marcin. 설명 할 수 있니? –

+0

왜 이해력을 사용하지 않고 목록에 추가하고 있습니까? – Marcin

2

일부 문제 : 당신이 다루는 매우 큰 목록이있는 경우에, 당신은 아마 yield 키워드를 사용하여, 발전기를 사용한다

  1. 이 필요하지 않는 range를 사용하여 반복하지 마십시오. 목록을 직접 또는 여기에서 반복하십시오. enumerate
  2. list을 변수로 사용하지 마십시오. 같은 이름의 내장을 음영 처리합니다. 그것은 독자에게 혼란 스럽습니다.
  3. 루프에서 돌아오고 있습니다. 이것이 첫 번째 반복 만받는 이유입니다.당신이 발전기로 기능을 켜 yield를 사용, 연속적인 값을 반환 할 경우 : 당신이 정말로를 교체하려면

    list(enumerate('abc')) #=> [(0, 'a'), (1, 'b'), (2, 'c')] 
    
  4. :

    def ash(l): 
        for x in range(len(l)): 
         yield l[x],x 
    
  5. 이 정말 enumerate의 재 구현입니다 쌍 순서, 당신은 할 수 있습니다 :

    [b,a for a,b in enumerate('abc')] 
    
  6. 대체 구현 :,321 0

0
def ash(lst):  
    return [(lst[x],x) for x in range(0,len(lst))] 

당신은 투플의 첫번째 값이 원래리스트의 요소리스트 내의 요소의 두번째 인덱스 튜플들의 목록을 얻을 것이다. y = [1,2,3]의 경우 결과는 [(1, 0), (2, 1), (3, 2)]

+0

색인을 기준으로 반복을해야하는 이유는 무엇입니까? – Marcin

+0

좋은 Pythonic 솔루션입니다. – ThePhysicist

+0

@Marcin은 목록의 뼈대와 요소를 얻습니다! –