2011-12-27 2 views
3

나는 파이썬을 배우려고 노력 중이며 책 프로그래밍 파이썬을 다룰 것이다. 나는 자바를 꽤 잘 알고 있으므로 python에도 시도해보기로했다. 나는 루프를 사용하는 예제를 통해 갈거야 내가루프 작업에서는 어떻게됩니까?

for person in people: 
    for (name, value) in person: 
    if name == 'name': print(value) 

는 내가 거기에 두 개의 루프가 있고 사람이 이해된다 해달라고 무슨 일이 통해 루프마다 의해 증가되는 것을 알고이 코드에서 무슨 일이 일어나고 있는지에 대한 혼란 스러워요 두 번째 루프에서 (이름, 값)에 무슨 일이 일어나고 있는지. 누군가 제게 무슨 일이 일어 났는지 설명해 주시겠습니까?

답변

8

대부분의 경우 :

people = [ 
    [['name', 'John'], ['age', 21]], 
    [['name', 'Ann'], ['age', 45]], 
    [['name', 'Tom'], ['age', 32]], 
] 

for person in people: 
    # person is like [['name', 'Ann'], ['age', 45]] here 
    for (name, value) in person: 
    # unpack [field_name, field_value] to name = field_name, value = field_value 
    # so name is like 'name' (or 'age') and value is like 'Ann' (or 45) 
    if name == 'name': print(value) 

모든 사람에 대한 정보가 목록에 저장됩니다 한 쌍. 이 방식으로이 person 목록을 반복하면 각 쌍을 두 필드 (예 : namevalue)의 압축을 풉니 다.이 필드는 나중에 필드 유형을 확인하고 이름 필드 인 경우 인쇄 값을 확인하는 데 사용됩니다.

이 코드 조각은 모든 사람의 이름을 인쇄합니다.

for vars in iterable: 

와 바르가 할당 문의 왼쪽에 나타날 수있는 모든 것을 할 수 있습니다 : 루프

+0

확인 감사를 보이는

[person1, person2, person3, ...] 

각각의 "사람"

처럼

그래서 "사람들은"보인다! 나는 지금 그것을 이해한다. –

1

사람이 튜플/목록의 목록이라고 가정하면 첫 번째 값과 두 번째 값을 추출합니다.

이 같이 기본적으로 동일 : 다음과 같은 형식의 3 개 차원 목록을 처리하기로했다

for x in person: 
    name = x[0] 
    value = x[1] 
    # or 
    name, value = x 
1

A는 형태를 갖는다. 그런 다음 반복 가능한 값의 각 값이 왼쪽에 할당됩니다. 당신의 루프에 따라서

a, b, c = 1, 2, 3 

: 파이썬에서

, 당신은 한 번에 이름의 수를 할당 할 수있는 경우 오른쪽은 많은 값 목록 또는 튜플이어야합니다 person의 각 값은 튜플 또는 두 개의 요소 인 쌍으로 된 목록이어야합니다. 루프의 각 반복, 다음 쌍은 namevalue에 압축이 풀립니다.

3

아니요, person은 루프를 통과 할 때마다 1 씩 증가하지 않습니다. 그것은 숫자가 아닙니다. person은 루프를 통해 매번 people에서 다음 항목을받습니다.

두 번째 루프는 동일합니다. person은 목록 (또는 다른 시퀀스)이며 목록을 통한 각 반복은 목록에서 하나의 항목을 검색합니다.

person의 각 항목은 키 - 값 쌍으로, 첫 번째 키와 두 번째 값이있는 두 항목 목록 (또는 다른 순서, 튜플이있을 가능성이 높음)으로 표시됩니다. 이 목록을 반복하는 대신 두 개의 항목이 있으므로 namevalue (일반적인 Python 관용구) 변수의 항목을 풀 수 있습니다.

"name"으로 시작하는 키 - 값 쌍이 발견되면 그 사람의 이름을 발견하여 인쇄합니다.

"name"이라는 단어가 키 - 값 쌍의 키와 찾고자하는 키에 사용되므로 다소 혼란 스럽습니다. 이 글을 쓰고 있다면 루프 변수에 "key"를 대신 사용할 것입니다.

간단히 말해서, people은 목록의 목록입니다. people의 각 목록은 사람을 나타내며 그 자체로 키 - 값 쌍의 목록입니다. 각 키 - 값 쌍은 두 항목의 목록입니다. 바깥 쪽 루프는 사람을 반복하고 안쪽 루프는 사람의 키 - 값 쌍을 반복합니다.

1

요약하면 "name"및 "value"는 "people"의 각 요소 "person"에 대해 "person"에서 할당 된 값을 가져옵니다.

조금만 백업 해 봅시다.

for person in people: 

은 "people"이라는 목록의 요소를 반복합니다. 이 루프를 통과 할 때마다 "person"이라는 변수에 "people"이라는 목록의 다음 요소가 할당됩니다.

for (name, value) in person: 

"사용자"라는 변수는 각 요소 "이름"및 "값"이라는 변수로 두 터플 된리스트이다. 이 루프를 통과 할 때마다 현재 "person"목록 요소는 "name"및 "people"이라는 구성 요소로 나뉩니다.

같은
[(name1, value1), (name2, value2), (name3, value3), ...]