Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

Freigeben: 2023-07-25 16:44:53
nach vorne
1756 Leute haben es durchsucht

1. Einführung

Hallo zusammen, ich bin ein fortgeschrittener Go-Spieler. Wenn eine Liste oder ein Tupel angegeben ist, kann die Liste oder das Tupel durch eine for-Schleife durchlaufen werden. Dieser Durchlauf wird als Iteration bezeichnet.


2. Fall

In Python erfolgt die Iteration über for... in, während in vielen Sprachen wie C oder Java die Iteration von Listen über Indizes erfolgt.

Zum Beispiel Java-Code:

for (i=0; i<list.length; i++) {   
n = list[i];
}
Nach dem Login kopieren

Hinweis:

Es ist ersichtlich, dass die Abstraktionsebene der for-Schleife von Python höher ist als die der for-Schleife von Java, da Python für Schleife kann nicht nur für Listen oder Tupel verwendet werden, sondern auch für andere iterierbare Objekte.

Obwohl die Datentypliste Indizes hat, haben viele andere Datentypen keine Indizes. Solange es sich jedoch um ein iterierbares Objekt handelt, kann es unabhängig davon, ob es einen Index hat, iteriert werden,

z dict. iterieren.

d = {&#39;a&#39;: 1, &#39;b&#39;: 2, &#39;c&#39;: 3}
 for key in d:   
   print(key)
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

注:

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

1. 字符串也是可迭代对象。

因此,也可以作用于for循环:

for ch in &#39;ABC&#39;:   
  print(ch)
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

所以,当使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而不太关心该对象究竟是list还是其他数据类型。

那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

from collections import Iterable
print(isinstance(&#39;abc&#39;, Iterable))  # str是否可迭代True
print(isinstance([1, 2, 3], Iterable))  # list是否可迭代True
print(isinstance(123, Iterable) ) # 整数是否可迭代False
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

如果要对list实现类似Java那样的下标循环怎么办?

Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

for i, value in enumerate([&#39;A&#39;, &#39;B&#39;, &#39;C&#39;]):  
  print(i, value)
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

上面的for循环里,同时引用了两个变量,在Python里是很常见的,

比如下面的代码:

for x, y in [(1, 1), (2, 4), (3, 9)]:    
  print(x, y)
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

2. 迭代dict的key和value

了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和value?答案是肯定的。

首先,看看 dict 对象的 items() 方法返回的值:

d = {&#39;Adam&#39;: 95, &#39;Lisa&#39;: 85, &#39;Bart&#39;: 59}
print(d.items())
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

可以看到,items() 方法把dict对象转换成了包含tuple的list,对这个list进行迭代,可以同时获得key和value:

for key, value in d.items():
    print(  key, &#39;:&#39;, value)
Nach dem Login kopieren

Ein Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen

注:

和values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple。

所以, iteritems() 不占用额外的内存。


3. Zusammenfassung

Dieser Artikel basiert auf den Grundlagen von Python und führt in die Verwendung der Python-Iteration ein. Jedes iterierbare Objekt kann in einer for-Schleife verwendet werden, einschließlich benutzerdefinierter Datentypen. Solange die Iterationsbedingungen erfüllt sind, kann eine for-Schleife verwendet werden. Durch die Fallanalyse werden zwei gängige Iterationsmethoden eingeführt. Bieten Sie wirksame Lösungen für die Schwierigkeiten, die im tatsächlichen Betrieb auftreten.

Das obige ist der detaillierte Inhalt vonEin Artikel, der Ihnen hilft, das Iterationswissen von Python zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Go语言进阶学习
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage