>  기사  >  백엔드 개발  >  Python_python에서 for 루프 사용에 대한 자세한 설명

Python_python에서 for 루프 사용에 대한 자세한 설명

不言
不言원래의
2018-04-04 17:29:325431검색

이 기사는 주로 Python의 for 루프 사용을 소개합니다. IBM 공식 웹사이트의 기술 문서에서 가져온 것입니다. 도움이 필요한 친구는

for 루프

이 시리즈의 이전 부분인 "Exploring Python, Part 5"를 참조할 수 있습니다. : Python을 사용한 프로그래밍" ” 기사에서는 if 문과 while 루프, 복합 문, Python 코드의 관련 블록을 나타내는 Python 문의 적절한 들여쓰기에 대해 설명합니다. 이 기사는 Python for 루프에 대한 소개로 끝납니다. 그러나 사용법과 기능 측면에서 for 루프는 더 많은 관심을 받을 가치가 있으므로 이 기사에서는 이 루프를 별도로 설명합니다.

for 루프에는 컨테이너 개체에서 단일 항목을 추출하고 해당 항목에 대해 특정 작업을 수행할 수 있는 간단한 구문이 있습니다. 간단히 말해서 for 루프를 사용하면 개체 컬렉션의 항목을 반복할 수 있습니다. 개체 컬렉션은 이전 기사에서 설명한 튜플, 문자열 및 목록 유형을 포함하여 모든 Python 컨테이너 유형이 될 수 있습니다. 그러나 컨테이너 비유는 이 세 가지 유형보다 더 강력합니다. 은유에는 사전 및 집합과 같은 다른 시퀀스 유형이 포함되며 이에 대해서는 향후 기사에서 논의됩니다.

하지만 기다려주세요! 그 밖에도 for 루프를 사용하면 반복 메타포를 지원하는 모든 개체를 반복할 수 있으므로 for 루프가 매우 유용합니다.

목록 1은 for 루프의 기본 구문을 보여주고 for 루프에서 continue 및 break 문을 사용하는 방법도 보여줍니다.
목록 1. for 루프에 대한 의사 코드

for item in container:
 
  if conditionA:    # Skip this item
    continue
 
  elif conditionB:   # Done with loop
    break
 
  # action to repeat for each item in the container
 
else:
 
  # action to take once we have finished the loop.

이 시리즈의 두 번째 기사인 "Python 탐색, 2부: Python 유형 계층 구조 탐색"에서는 Python 튜플을 소개합니다. 기사에서 언급했듯이 튜플 유형은 불변의 이기종 컨테이너입니다. 이는 주로 튜플이 다양한 유형의 객체를 저장할 수 있지만 일단 생성되면 변경할 수 없음을 의미합니다. 목록 2에서는 for 루프를 사용하여 튜플 요소를 반복하는 방법을 보여줍니다.
목록 2. for 루프 및 튜플

>>> t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 
>>> count = 0
>>> for num in t:
...   count += num
... else:
...   print count
... 
45
>>> count = 0
>>> for num in t:
...   if num % 2:
...     continue
...   count += num
... else:
...   print count
... 
20

이 예에서는 먼저 0~9(9 포함)의 정수를 저장하기 위해 t라는 튜플을 만듭니다. 첫 번째 for 루프는 튜플을 반복하여 튜플 값의 합계를 count 변수에 누적합니다. 코드가 튜플의 모든 요소를 ​​반복한 후 for 루프의 else 절을 ​​입력하고 count 변수의 값을 인쇄합니다.

목록 2에 표시된 두 번째 for 루프도 튜플의 모든 요소를 ​​반복합니다. 그러나 컨테이너에서 2로 나눌 수 있는 항목의 값만 누적합니다(표현식이 0이 아닌 경우 if 문이 true이고 num을 2로 나눌 수 없을 때 % 연산자를 사용하면 0이 아닌 값이 반환된다는 점을 기억하세요). 값) . 이 제한은 적절한 if 문과 continue 문을 사용하여 수행됩니다. 이전 기사에서 언급했듯이 continue 문은 이를 포함하는 루프가 다음 반복을 시작하도록 합니다. 동일한 결과를 얻는 또 다른 방법은 튜플의 현재 항목이 짝수인지 테스트하고(if not num % 2: 사용), true인 경우 현재 항목을 누계에 추가하는 것입니다. 코드가 튜플 반복을 완료하면 else 절이 호출되어 합계를 인쇄합니다.

이 시리즈의 세 번째 기사인 "Python 탐색: 3부: Python 유형 계층 탐색"에서는 Python 문자열에 대해 설명합니다. String은 불변의 동형 컨테이너입니다. 즉, 문자만 저장할 수 있고 생성된 후에는 수정할 수 없습니다. 목록 3은 Python 문자열을 for 루프의 컨테이너로 사용하는 방법을 보여줍니다.
목록 3. for 루프 및 문자열

>>> st = "Python Is A Great Programming Language!"
>>> for c in st:
...   print c,
... 
P y t h o n  I s  A  G r e a t  P r o g r a m m i n g  L a n g u a g e !
>>> count = 0
>>> for c in st:
...   if c in "aeiou":
...     count += 1
... else:
...   print count
...
10
>>> count = 0
>>> for c in st.lower():
...   if c in "aeiou":
...     count += 1
... else:
...   print count
... 
12

이 예에서는 모두 동일한 문자열을 반복하는 세 가지 다른 for 루프를 제공합니다. 첫 번째 for 루프는 "Python은 훌륭한 프로그래밍 언어입니다!"라는 문자열을 반복하고 한 번에 한 문자씩 문자열을 인쇄합니다. 이 예에서는 print 문 변수 c에 쉼표가 추가됩니다. 이로 인해 print 문은 개행 문자 대신 공백 문자가 뒤에 오는 문자 값을 인쇄합니다. 다음 쉼표가 없으면 문자가 모두 별도의 줄에 인쇄되어 읽기가 어렵습니다.

다음 두 개의 for 루프는 문자열을 반복하고 포함된 모음("a", "e", "i", "o" 또는 "u") 수를 계산합니다. 두 번째 for 루프는 원래 문자열을 반복할 때 소문자 모음만 찾습니다. 세 번째 for 루프는 문자열 객체의 하위 메서드를 호출하여 반환된 임시 문자열을 반복합니다. lower 메소드는 문자열의 모든 문자를 소문자로 변환합니다. 따라서 세 번째 for 루프는 모음을 두 개 더 찾습니다.

이 시리즈의 네 번째 기사인 "Python 탐색, 4부: Python 유형 계층 구조 탐색"에서는 Python 목록을 소개합니다. 목록은 이기종 변경 가능한 컨테이너입니다. 즉, 다양한 유형의 개체를 저장할 수 있고 생성 후 수정할 수 있습니다. 목록 4에서는 목록과 for 루프를 사용하는 방법을 보여줍니다.
목록 4. for 루프 및 목록

>>> mylist = [1, 1.0, 1.0j, '1', (1,), [1]]
>>> for item in mylist:
...   print item, "\t", type(item))
... 
1    <type &#39;int&#39;>
1.0   <type &#39;float&#39;>
1j   <type &#39;complex&#39;>
1    <type &#39;str&#39;>
(1,)  <type &#39;tuple&#39;>
[1]   <type &#39;list&#39;>

목록은 매우 유연한 Python 컨테이너 유형이므로(이 시리즈의 나머지 부분에서 여러 번 보게 될 것임) 이 예제는 너무 단순해 보일 수 있습니다. 그러나 요점은 다음과 같습니다. for 루프를 사용하면 컨테이너의 각 항목을 처리하는 것이 매우 간단해지며, 다양한 객체가 포함된 목록도 처리됩니다. 이 예제는 Python 목록의 모든 항목을 반복하고 각 항목과 해당 Python 유형을 별도의 줄에 인쇄합니다.
반복 및 변경 가능한 컨테이너

Python list 是一个可变序列,提供了一种令人好奇的可能性:for 循环主体可以修改其正在迭代的 list。正如您可能认为的,这样并不好,如果进行此操作,Python 解释器将无法很好地工作,如清单 5 所示。
清单 5. 在 for 循环中修改容器

>>> mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for item in mylist:
...   if item % 2:
...     mylist.insert(0, 100)
... 
^CTraceback (most recent call last):
 File "<stdin>", line 3, in ?
KeyboardInterrupt
>>> print mylist
[100, ...., 100, 100, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Many lines deleted for clarity
>>> mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for item in mylist[:]:
...   if item % 2:
...     mylist.insert(0, 100)
... 
>>> print mylist
[100, 100, 100, 100, 100, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

本例中的第一个 for 循环只要在原始 list 中发现奇数,它就在 list 的开始插入数值 100。当然,这是一种演示此问题的不同寻常的方式,但却非常好。一旦在三个点的 Python 提示后按 Enter 键,Python 解释器就处于无限循环的混乱中。要停止这种混乱,必须通过按 Ctrl-C(其在 Python 输出中显示为 ^C)来中断进程,然后会出现 KeyboardInterrupt 异常。如果打印出修改的 list,将看到 mylist 现在包含大量的值为 100 的元素(新元素的准确数量取决于您中断循环的速度)。

本例中的第二个 for 循环演示了如何避免此问题。使用切片运算符创建原始 list 的副本。现在 for 循环将迭代该副本,而对原始 list 进行修改。最终的结果是修改后的原始 list,它现在以五个值为 100 的新元素开始。

for 循环和序列索引

如果您用过其他编程语言,Python for 循环可能看起来有点儿古怪。您可能认为它更像 foreach 循环。基于 C 的编程语言具有 for 循环,但它的设计目的是对一系列操作执行特定次数。Python for 循环可以通过使用内置的 range 和 xrange 方法来模拟该行为。清单 6 中演示了这两种方法。
清单 6. range 和 xrange 方法

>>> r = range(10)
>>> print r
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> type(r)
<type &#39;list&#39;>
>>> xr = xrange(10)
>>> print xr
xrange(10)
>>> type(xr)
<type &#39;xrange&#39;>

本例首先演示了 range 方法,它创建一个包含一系列整数的新 list。调用 range 方法的一般形式是提供单个值,用作整数 list 的上限。零为起始值。因此,调用 range(10) 将创建包含整数 0 至 9(包含 9)的 list。range 方法接受起始索引以及步长。所以,调用 range(11,20) 将创建从 11 至 19(包含 19)的整数 list,而调用 range(12, 89, 2) 将创建从 12 至 88 的偶数 list。

由于 xrange 方法也创建整数 list(其使用相同参数),所以它与 range 方法非常相似。但是,xrange 方法仅在需要时才在 list 中创建整数。例如,在清单 6 中,尝试打印出新创建的 xrange 时除了 xrange 的名称,不会显示任何数据。当需要迭代大量整数时,xrange 方法更适用,因为它不会创建极大的 list,那样会消耗大量计算机内存。

清单 7 演示了如何在 for 循环内使用 range 方法来创建整数 1 至 10(包含 10)的乘法表。
清单 7. 创建乘法表

>>> for row in range(1, 11):
...   for col in range(1, 11):
...     print "%3d " % (row * col),
...   print
... 
 1  2  3  4  5  6  7  8  9  10 
 2  4  6  8  10  12  14  16  18  20 
 3  6  9  12  15  18  21  24  27  30 
 4  8  12  16  20  24  28  32  36  40 
 5  10  15  20  25  30  35  40  45  50 
 6  12  18  24  30  36  42  48  54  60 
 7  14  21  28  35  42  49  56  63  70 
 8  16  24  32  40  48  56  64  72  80 
 9  18  27  36  45  54  63  72  81  90 
 10  20  30  40  50  60  70  80  90 100

本例使用两个 for 循环,外面的 for 循环关注乘法表中的每一行,嵌套的 for 循环关注每行内的列。每个循环都迭代包含整数 1 至 10(包含 10)的 list。最里面的 print 语句使用了一个名为 字符串格式化 的新概念来创建格式设置精美的表。字符串格式化是一种非常有用的技术,用于以格式设置精美的布局创建由不同数据类型组成的 string。现在详细信息并不重要,将来的文章中将讲述这些内容(了解 C 编程语言的 printf 方法的任何人都会很熟悉这些内容)。在本例中,字符串格式化指定将从整数创建新 string 且需要保留三个字符来存放该整数(如果该整数小于三个字符,将在左边用空格填补,从而使数据排列整齐)。第二个 print 语句用于打印新行,从而使乘法表中的下一行被打印在新的行中。

range 方法还可用于迭代容器,通过使用适当的索引访问序列中的每一项。要进行此操作,需要包含容器的允许范围索引值的整数 list,这可以通过使用 range 方法和 len 方法来轻松实现,如清单 8 所示。
清单 8. 在 for 循环内索引容器

>>> st = "Python Is A Great Programming Language!"
>>> for index in range(len(st)): 
...   print st[index],
... 
P y t h o n  I s  A  G r e a t  P r o g r a m m i n g  L a n g u a g e !
>>> for item in st.split(&#39; &#39;):
...   print item, len(item)
... 
Python 6
Is 2
A 1
Great 5
Programming 11
Language! 9

这个最后的示例演示了如何使用 len 方法作为 range 方法的参数,创建可用于单独访问 string 中每个字符的整数 list。第二个 for 循环还显示了如何将 string 分割为子字符串的 list(使用空格字符来指示子字符串的边界)。for 循环迭代子字符串 list,打印每个子字符串及其长度。

结束语

本文讨论了 Python for 循环并演示了它的一些使用方式。可以将 for 循环与提供迭代器的任何 Python 对象结合使用,这些对象包括 tuple、string 和 list 等内置序列类型。for 循环和 list 序列一起使用时具有强大的功能,您会发现自己在许多情况中都要使用它们。Python 提供了用于组合这两个概念的简单机制,称为列表理解,将来的文章中将讲述该内容。

관련 권장 사항:

중첩된 for 루프 예제에 대한 PHP

js의 for 루프와 foreach 루프의 사용법 및 차이점

위 내용은 Python_python에서 for 루프 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.