Python で反復可能なオブジェクトを個別の変数に分解する方法 (コード)

不言
リリース: 2018-10-11 14:09:43
転載
2213 人が閲覧しました

この記事は、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!