ホームページ >バックエンド開発 >Python チュートリアル >Python で反復可能なオブジェクトを個別の変数に分解する方法 (コード)
この記事は、Python で反復可能なオブジェクトを個別の変数に分解する実装方法 (コード) に関するものです。一定の参考価値があります。必要な友人が参照することができます。お役に立てば幸いです。ヘルプ。
1. 要件
N 個の要素を含むタプルまたはシーケンスがあり、それを N 個の個別の変数に分解したいとします。
2. 解決策
Python では、任意のシーケンス、タプル、またはシリアル化可能なオブジェクトを、単純な代入操作を通じて個別のオブジェクトに分解できます。
唯一の要件は、変数の合計数と構造がシーケンスと一致する必要があることです。一致しない場合、エラーが報告されます
表示例:
#将序列分解为单独的变量 m=(1,2) x,y=m print("x=",x) print("y=",y) print("*"*30) data=["mark",18,"超级帅",(1992,5,4)] name,age,feature,birthday=data print("name=",name) print("age=",age) print("feature=",feature) print("birthday=",birthday) print("*"*30) name,age,feature,(year,mon,day)=data print("name=",name) print("age=",age) print("feature=",feature) print("year=",year) print("mon=",mon) print("day=",day)
Result
x= 1 y= 2 ****************************** name= mark age= 18 feature= 超级帅 birthday= (1992, 5, 4) ****************************** name= mark age= 18 feature= 超级帅 year= 1992 mon= 5 day= 4
3. Thinking
タプルのリストは、文字列、ファイル、イテレータ、ジェネレータなどのオブジェクトが反復可能である限り、分解操作を実行できます。
表示例:
#将序列分解为单独的变量 mark="mark" m,a,r,k=mark print(m) print(a) print(r) print(k) print("*"*30) #有时候我们想丢弃某个值,单由于变量数量必须和要分解的对象的可分解数量相同,此时我们可以使用_来表示要丢弃的值。 mark="mark" m,a,r,_=mark print(m) print(a) print(r) #其实_还是一个变量,指示看起来舒服点 print(_)
結果:
m a r k ****************************** m a r k
4. 要件のアップグレード
シリアル番号オブジェクトを次のように分解できるかどうかN 個の要素、N 個の要素を作成する必要がありますか? N の値が非常に大きい場合はどうなるでしょうか?
5. ソリューションのアップグレード
Python の "*expression" は、上記のニーズを満たすことができます。たとえば、無数の成績リスト (成績) があります。次に、最初の成績と最後の成績を削除し、残りの成績の平均を求めたいとします。
Code
import numpy as np grades=list(range(10))#定义一个0-999的分数列表 print("grades:"+str(grades)) first,*middle,last=grades print("middle:"+str(middle)) print("去掉第一个和最后一个分数后的平均值:"+str(np.mean(middle)))
Result
grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] middle:[1, 2, 3, 4, 5, 6, 7, 8] 去掉第一个和最后一个分数后的平均值:4.5
もちろん、この [*式] は最初の位置、最後の位置、またはその他の位置に配置できます。
ユーザー レコードがいくつかあるとします。レコードは、名前と電子メール アドレスに続いて任意の数の電話番号で構成されます:
record=('mark','1782980833@qq.com','18321859453','18956245389') name,email,*phone_numbers=record print(name) print(email) print(phone_numbers)
実行結果:
mark 1782980833@qq.com ['18321859453', '18956245389']
6 , *式のスキル
*式は、タプルの可変長シーケンスを反復処理する場合に特に役立ちます
コード:
records=[ ('foo',1,2), ('bar','hello'), ('foo',3,4), ] def do_foo(x,y): print('foo',x,y) def do_bar(s): print('bar',s) for tag,*args in records: if tag=='foo': do_foo(*args) elif tag=='bar': do_bar(*args)
結果:
foo 1 2 bar hello foo 3 4
特定の文字列処理操作 (分割など) と組み合わせる場合にも便利です
コード:
line='nobody:*:-2:-2:unp user:/var/empty:/user/nim/false' uname,*fileds,homedir,sh=line.split(':') print(uname) print(homedir) print(sh)
結果:
nobody /var/empty /user/nim/false
以上がPython で反復可能なオブジェクトを個別の変数に分解する方法 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。