ホームページ >バックエンド開発 >Python チュートリアル >入門操作リストから学ぶPython
4.1 リスト全体を走査する
多くの場合、リスト内のすべての要素を反復処理し、各リストに対して同じ操作を実行する必要があります。これは、繰り返しの作業、繰り返しの作業を行う場合に便利です。たとえば、ゲームでは、各インターフェイス要素を同じ距離に変換する必要がある場合があります。数値を含むリストの場合は、Web サイトの各要素に対して同じ統計演算を実行する必要がある場合があり、各タイトルを表示する必要がある場合があります。 3記事。リスト内の各要素に対して同じ操作を実行する必要がある場合は、Python の for ループ を使用できます。
マジシャンのリストがある場合は、各マジシャンの名前を出力する必要があります。これを行うには、リスト内の各名前を個別に取得できますが、これでは多くの問題が発生します。たとえば、リストが長すぎる場合、重複したコードが多数含まれることになります。さらに、リストの長さが変更されるたびにコードを変更する必要があります。 for ループを使用すると、これらの問題を Python に処理させることができます。 busight a a a for loopを使用して、魔術師のリストにすべての名前を印刷するために:
rrereerreerreerreerreerreerreerreerreerreerreerrereerreerreerreerreerreerreemagicians = ["alice","david","carolina"] for magician in magicians: (magician) 运行结果: alice david carolina 首先,我们像第三章那样定义了一个列表。接下来,我们定义了一个for循环;这行代码让Python从列表magicians中去除一个名字,并将其存储在 magician中。最后,我们让Python打印前面存储到变量magician中的名字。这样,对于列表中的每个名字,Python都将重复执行。我们可以这样解读这些代码 :对于列表magician中的每位魔术师,都将其名字打印出来。输出很简单,就是列表中所有的姓名: 4.1.1 深入地研究循环循环这种概念很重要,尤其在操作重复性的问题的时候,使用自动循环会提高很多效率,而且它是让计算机自动完成重复工作的常见方式之一。例如,在前 面的magicians.py中使用的简单循环中,Python将首先读取其中的第一行代码: for magician in magicians: 这行代码,让Python获取列表中magicians中的第一个值("alice"),并将其存储到变量magician中。接下来,Python读取下一行代码。 print(magician) 它让Python打印magician的值---依然是"alice"。鉴于该列表还包含其他值,Python返回循环的第一行: for magician in magicians: python获取列表中下一个名字——"david",并将其存储到变量magician中,在执行下面的代码: print(magician) Python再次打印变量magician的值"david"。接下来,Python再次执行整个循环,对列表中的最后一个值——"carolina"进行处理。至此,列表中没有其 它的值了,因此Python接着执行程序的下一行代码。在这个实例中,for循环后面没有其他的代码,因此程序就此结束。 刚开始使用循环时请牢记,对列表中的每个元素,都将执行循环制定的步骤,而不管列表包含多少元素。如果列表包含一百万个元素,Python就重复执行一 百万次,且通常速度非常快。 另外,编写for循环时,对于用于存储列表中每个值的临时变量,可指定任何名称。然而,选择描述单个列表元素的有意义的名称大有帮助。例如,对于小 猫列表,小狗列表和一般性列表,像下面这样编写for循环的第一行代码是不错的选择: for dog in dogs: for cat in cats: for item in _of_items: 这些命名约定有助于我们明白for循环中将对每个元素执行的操作。使用单数和复数式名称,可帮助我们判断代码处理的是单个列表元素还是整个列表。 4.1.2 在for循环中执行更多的操作在for循环中,可对每个元素执行任何操作。rrreerreerree
magicians = ["alice","david","carolina"] for magician in magicians: print(magician.title() + ", that was a greet trick!") 下面输出结果表明,对于列表中的每位魔术师,都打印了一条个性化消息: Alice, that was a greet trick! David, that was a greet trick! Carolina, that was a greet trick!在for循环中,想包含多少行代码都可以。在代码行for magician in magicians后面,每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都 执行一次。因此,可对列表中能够的每个值执行任意次数的操作。 下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表演:
magicians = ["alice","david","carolina"] for magician in magicians: print(magician.title() + ", that was a greet trick!") print("I can't wait to see your trick, " + magician.title() + ".\n" ) 由于两条print语句都缩进了,因此它们都将针对列表中的每位魔术师执行一次。第二条print语句中的换行符"\n"在每次迭代结束后都插入一 个空行,从而整洁地将针对各位魔术师的消息编组: Alice, that was a greet trick! I can't wait to see your next trick, Alice. David, that was a greet trick! I can't wait to see your next trick, David. Carolina, that was a greet trick! I can't wait to see your next trick, Carolina! 在for循环中,想包含多少行代码都可以。实际上,我们会发现使用for循环对每个元素执行众多不同的操作很有用。 4.1.3 在for循环结束后执行一些操作for循环结束后再怎么做呢?通常,我们需要提出总结性输出或接着执行程序必须完成的其他任务。 在for循环后面,没有缩进的代码都只执行一次,而不会重复执行。下面来打印一条向全体魔术师致谢的消息,感谢它们的精彩表演。想要在打印给各位 魔术师的消息后面打印一条给全体魔术师的致谢消息,需要将相应的代码放在for循环后面,且不缩进:
magicians = ["alice","david","carolina"] for magician in magicians: print(magician.title() + ", that was a great trick!") print("I can't wait to see your next trick, " + magician.title() + ".\n" ) print("Thank you,everyone. That was a great magic show!") 我们在前面看到了,开头两条print语句针对列表中每位魔术师重复执行。然而,由于第三条print语句没有缩进,因此只执行一次: Alice, that was a great trick! I can't wait to see your next trick, Alice. David, that was a great trick! I can't wait to see your next trick, David. Carolina, that was a great trick! I can't wait to see your next trick, Carolina. Thank you,everyone. That was a great magic show!使用for循环处理数据是一种对执行整体操作的不错的方式。例如,你可能使用for循环来初始化游戏——遍历角色列表,将每个角色都显示到屏幕 上;再在循环后面添加一个不缩进的代码块,在屏幕上绘制所有角色后显示一个play Now。 4.2 避免缩进错误 Python根据缩进来判断代码行与前一个代码行的关系。在前面的实例中,向各位魔术师显示消息的代码行是for循环的一部分,因为它们缩进了。Python通 过缩进让代码更易读;简单地说,它要求我们使用缩进让代码整洁而结构清晰。在较长的Python程序中,我们将看到缩进程度各不相同的代码块,这让我们队程 序的组织结构有大致的认识。 当我们开始编写必须正确缩进的代码时,需要注意一些常见的缩进错误。例如,有时候,程序员会将不需要缩进的代码块缩进,而对于必须缩进的代码块却 忘了缩进。通过查看这样的错误示例,有助于我们以后避开它们,以及在它们出现在程序中时进行修复。 4.2.1 忘记缩进对于位于后面且属于循环组成部分的代码行,一定要缩进。如果我们忘记缩进,Python会提醒:friendmentmentを使用すると、friend_foods、my_food s and friend_foods share a shimping a a new ne new in new in new in friend_foods上記は単に相互に関連しているだけなので、値を割り当てると次のようになります。
新しい要素を my_foods リストに追加すると、その要素は元のメモリに追加されます。 friends_foods に追加すると、新しい要素も元のメモリ リストに追加されるため、代入が使用される場合、Python は新しいメモリをオープンせず、上に示したように 2 つの変数を関連付けるだけなので、2 つの最終結果は依然としてと同じ。
スライスを使用する場合の状況を見てみましょう:スライスを使用するため、新しい要素を追加すると、スライスにより、friend_foods を保存するための新しいメモリ リストが開きます。
2 つの異なるメモリ割り当てリストがあり、新しい要素が my_foods に追加されると、その要素は my_foods のメモリ リストにのみ追加され、新しい要素が friends_foods に追加されると、その要素は friends_foods が属するメモリ リストにのみ追加されます。新しい要素のため、出力結果が異なります。
したがって、Python では値の代入とスライスの動作メカニズムが異なります。これまではあまり気にしていませんでしたが、今後は注意していきます。特にコピー操作の場合。 要約: 1 つのパラメーターを別のパラメーターと等しくする場合 (直接 a = b)、これは代入です。Python では、それは共有メモリです。 ぜひ試してみてください 4-10 スライス: この章で作成したプログラムを選択し、最後に数行のコードを追加して、以下のタスクを完了します。 1. 「リストの最初の 3 つの項目は次のとおりです。」というメッセージを出力します。スライスを使用してリストの最初の 3 つの要素を出力します。 2. 「リストの中央の 3 つの項目は次のとおりです。」というメッセージを出力します。スライスを使用してリストの中央にある 3 つの要素を出力します。 3. 「リストの最後の 3 つの項目は次のとおりです。」というメッセージを出力し、スライスを使用してリストの最後の 3 つの要素を出力します。 4-11 あなたのピザと私のピザ: 演習 4-1 を完了するために作成したプログラムで、ピザ リストのコピーを作成し、それを変数 friends_pizzas に保存します。 1. 元のピザ リストにピザを追加します。 2. 別のピザを friends_pizzas リストに追加します。 3. 2 つの異なるリストがあることを確認します。これを行うには、「私のお気に入りのピザは次のとおりです。」というメッセージを出力し、for ループを使用して 2 番目のリストを出力します。new
ピザが正しいリストに追加されていることを確認します。4-10: この質問は主にリスト スライスの表現方法、特に最後の要素を表す L.[-1] を調べるときに使用されます。最後のいくつかの要素を使用すると、リストのスライスは要素の数から要素の数まで、中央でコロンで区切られて表現されます。
数字 = [2,3,8,9,0,3,5,7]
print("リストの最初の 3 つの項目は次のとおりです: ")
print(数字[:3])
print("nThreeリストの中央の項目は次のとおりです: ")
print(digits[2:5])
print("nリストの最後の 3 つの項目は次のとおりです: ")
print(digits[-3:])
実行結果次のとおりです:
リストの最初の 3 つの項目は次のとおりです:
[2, 3, 8]
リストの途中からの 3 つの項目は次のとおりです:
[8, 9, 0]
リストの最後の 3 つの項目は次のとおりです:
[3, 5, 7]
4-11 この問題は主に、スライスの使用法とリストのコピー方法を検討します。これは Python の動作原理によって決定されます。
pizzas = ["Newヨークスタイル","シカゴスタイル","カリフォルニアスタイル"]
friends_pizzas = ピザ[:]
ピザ.append("ヌードル")
friends_pizzas.append("ライス")
print (「私の好きなピザは: ")
ピザのピザ:
print(ピザ)
print(ピザ)
print("n私の友達の好きなピザは: ")
friends_pizza in friends_pizzas:
print(friend_pizza )
print(friend_pizzas)
実行結果:
私のお気に入りのピザは次のとおりです:
ニューヨーク スタイル
シカゴ スタイル
カリフォルニア スタイル
ヌードル
['ニューヨーク スタイル', 'シカゴ スタイル', 'カリフォルニア スタイル', 'ヌードル']
私の友達のお気に入りのピザは次のとおりです:
ニューヨークスタイル
シカゴスタイル
カリフォルニアスタイル
ライス
['ニューヨークスタイル'、'シカゴスタイル'、'カリフォルニアスタイル'、'ライス'】
4.5原始的
リスト完璧中古プログラムの実行中に変更される可能性のあるデータセットを保存します。リストは変更可能です。これは、Web サイトのユーザーのリストやゲームのキャラクターのリストを操作する場合に非常に重要です。ただし、一連の不変要素を作成する必要がある場合もあり、Yuanzu はこのニーズを満たすことができます。 Python では変更できない値を不変と呼び、不変のリストをプリミティブと呼びます。
4.5.1 元図の定義
元図はリストのように見えますが、角括弧の代わりに括弧でマークされています。タプルが定義されると、リスト要素と同様に、インデックスを使用してその要素にアクセスできます。
たとえば、サイズを変更してはいけない長方形がある場合は、その長さと幅をタプルに保存し、変更できないようにします。
Dimensions.py
Dimensions = (200,50)
print (dimensions[ 0])
Print(dimensions[1])
まず、角括弧の代わりに括弧を使用して祖先次元を定義します。次に、リスト要素にアクセスするときに使用するのと同じ構文を使用して、祖先の各要素をそれぞれ出力します:
200
50
定義により、祖先の要素は変更できないことがわかっています。次に試してみましょう。要素の次元の 1 つを調べて、何が起こるかを確認します:
Dimensions = (200,50)
Dimensions[0] = 250
print(dimensions) コードは最初の要素の値を変更しようとしているため、Python は型エラーを返します。メッセージ 。祖先を変更する試みは禁止されているため、Python は祖先の要素に値を割り当てることができないことを指摘します:
トレースバック (最新の呼び出し最後):
ファイル "/home/zhuzhu/title4/dimensions.py", 2 行目、module>
Dimensions[0] = 250
TypeError: 'tuple' object は項目の割り当てをサポートしていません
コードが四角形の寸法を変更しようとすると、Python はエラーを報告しますそれはまさに私たちが望んでいることなので、これは良いことです。
4.5.2 Yuanzuのすべての値をトラバースします
像列表一样,也可以使用for循环来遍历元组中的所有值:
dimensions = (200,50)
for dimension in dimensions:
print(dimension)
就像遍历列表时一样,Python返回元组中所有的元素:
200
50
4.5.3 修改元组变量
虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200,50)
print("Original dimensions: ")
for dimension in dimensions:
print(dimension)
dimensions = (400,100)
print("\nModified dimensions: ")
for dimension in dimensions:
print(dimension)
我们首先定义了一个元组,并将其存储的尺寸打印了出来;接下来,将一个新元组存储到变量dimensions中;然后,打印新的尺寸。这次,Python不会报告任何错误,因为给元组变量赋值是合法的:
Original dimensions:
200
50
Modified dimensions:
400
100
相比于列表,元组是更简单的数据结构.如果需要存储的一组值在程序的整个生命周期内都不变,可使用元组。
动手试一试
4-13 自助餐: 有一家自助式餐厅,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元祖中。
1、使用一个for循环将该餐馆提供的五种食品都打印出来;
2、尝试修改其中的一个元素,核实Python确实会拒绝我们这样做;
3、餐馆调整了菜单,替换了它提供的某中两种实物。请编写一个这样的代码块;给元组变量赋值,并使用一个for循环将新元组中的每个元素都打印出来。
分析:本题主要考察元组的性质及用法,我们知道,元组中的元素是不可以修改的,但是元组是可以重新赋值的,我们虽然不能修改元组中的元素,但是我们可以整体修改元组,元组其他的性质跟列表的性质都是一样的,就是不能对元组本身就行修改,比如添加,删除,赋值等。
cafeterias = ("rice","noodle","porridge","hamburger","pizza")
for cafeteria in cafeterias:
print(cafeteria)
cafeterias[-1] = "dami"
运行结果如下:
rice
noodle
porridge
hamburger
pizza
Traceback (most recent call last):
File "/home/zhuzhu/title4/Cafeterias.py", line 5, in
cafeterias[-1] = "dami"
TypeError: 'tuple' object does not support item assignment
从运行结果可以看出,当我们试图修改元组的元素是,发生了错误,提示我们不能修改元组的元组值
cafeterias = ("rice","noodle","porridge","hamburger","pizza") print("Original menu: ") for cafeteria in cafeterias: print(cafeteria) #cafeterias[-1] = "dami" cafeterias = ("pizza",'hamburger','rice','milk','Drumsticks') print("\nModified menu: ") for cafeteria in cafeterias:print(cafeteria)运行结果如下:Original menu: rice noodle porridge hamburger pizza Modified menu: pizza hamburger rice milk Drumsticks 从运行结果可以看出,虽然我们不能修改元组中元素的值,但我们可以整体重新给元组进行赋值,这样是允许的,因而我们可以对元组重新赋值,这是允许的, 也是合法的,系统不会报错。 4.6 设置代码格式 随着我们编写的程序越来越长,有必要了解一些代码格式设置的约定。请花时间让我们的代码进可能易于阅读;让代码易于阅读有助于我们掌握程序是做什 么的,也可以帮助他人理解我们编写的代码。 为确保所有人编写的代码的结构都大致一致,Python程序员都遵循一些格式设置约定。学会编写整洁的Python后,就能明白他人编写的Python代码的整体 结构——只要他们和你遵循相同的指南。要称为专业程序员,应从现在开始就遵循这些指南,以养成良好的习惯。 4.6.1 格式设置指南若要提出Python语言修改建议,需要编写Python改进提案(Python Enhancement Proposal,PEP).PEP8是最古老的PEP之一,它向Python程序员提供了代 码格式设置指南。PEP8的篇幅很长,但大都与复杂的编码结构相关。 Python格式设置指南的编写者深知,代码被阅读的次数比编写的次数多。代码编写出来后,调试时你需要阅读它;给程序添加新功能时,需要花很长的时间 阅读代码;与其他程序员分享代码时,这些程序员也将阅读它们。 如果一定要在代码易于编写和易于阅读之间做出选择,Python程序员几乎总是选择后者。下面的指南可帮助我们从一开始就编写除清晰的代码。 4.6.2 缩进 PEP 8建议每级缩进都使用四个空格,这即可提高可读性,又留下了足够的多级缩进空间。 在字处理文档中,大家常常使用制表符而不是空格来缩进。对于字处理文档来说,这样做的效果很好,但混合使用制表符和空格会让Python解释器感到迷惑 。每款文本都提供了一种设置,可将输入的制表符转换为指定数量的空格。我们在编写代码时应该使用制表符键,但一定要对编辑器进行设置,使其在文 档中插入空格而不是制表符。 在程序中混合制表符和空格可能导致极难解决的问题。如果我们混合使用了制表符和空格,可将文件中所有的制表符转换为空格,大多数编辑器都提供了这 样的功能。 4.6.3 行长 很多Python程序员都建议每行不超过80字符。最初制定这样的指南时,在大多数计算机中,终端窗口每行只能容纳79字符;当前,计算机屏幕每行可容纳的 字符数多得多,为何还要使用79字符的标准行长呢?这里有别的原因。专业程序员通常会在同一个屏幕上打开多个文件,使用标准行长可以让我们在屏幕上并排 打开两三个文件时能同时看到各个文件的整行。PEP 8还建议的行长都不超过72字符,因为有些工具为大型项目自动生成文档时,会在每行注释开头添加格式 化字符。 PEP 8中有关行长的指南并非不可逾越的红线,有些小组将最大行长设置为99字符。在学习期间,我们不用过多考虑代码的行长,但别忘了,协作编写程序, 大家几乎都遵守PEP 8指南。在大多数编辑器中,都可设置一个视觉标志——通常是一条竖线,让你知道不能越过的界限在什么地方。 4.6.4 空行 要将程序不同部分分开,可使用空行。我们应该使用空行来组织程序文件,但也不能滥用;只要按本书的示例展示的那样做,就能掌握其中的平衡。例如, 如果我们有5行创建列表的代码,还有3行处理该列表的代码,那么用一个空行将这两部分隔开是合适的。然而,我们不应该使用三四个空行将它们隔开。 空行不会影响代码的运行,但会影响代码的可读性。Python解释器根据水平缩进情况来解读代码,但不关心垂直间距。
Original menu:
rice
noodle
porridge
hamburger
pizza
Modified menu:
pizza
hamburger
rice
milk
Drumsticks
以上が入門操作リストから学ぶPythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。