1

5 つのリストがあり、そのうちの 3 番目と 5 番目だけに関心がある場合、Erlang で次のようにします。

[_First, _Second, Third, _Fourth, Fifth] = ListOfFiveElements,

アンダースコアは、それらの変数を気にしないことを意味し、最終結果として、3 番目と 5 番目は、そのリストの 3 番目と 5 番目にあるものにバインドされます。Pythonで同じことを行うにはどうすればよいですか?

4

3 に答える 3

4

タプルのアンパックを使用できます。慣例では、_気にしないものに a を使用できます。

>>> ListOf5=['one','two','three','four','five']
>>> _,_,Third,_,Fifth=ListOf5
>>> Third, Fifth
('three', 'five')

これは、合計数が正しい限り、Python の任意のシーケンスで機能します。

>>> _,_,Third,_,Fifth=[c for c in 'abcde']
>>> Third, Fifth
('c', 'e')

割り当ての LH 側の要素と一致するように RH タプルを構築することもできます。

>>> Third,Fifth=ListOf5[2],ListOf5[4]
>>> Third,Fifth
('three', 'five')

そして -- それを待って -- Python 3 では、First、Second、All The Rest のようなタプル割り当てを実行できます。

>>> s1,s2,*s3='abcdefg'
>>> s1,s2,s3
('a', 'b', ['c', 'd', 'e', 'f', 'g'])
>>> s1,*s2,s3='abcdefg'
>>> s1,s2,s3
('a', ['b', 'c', 'd', 'e', 'f'], 'g')
于 2013-09-30T00:44:47.647 に答える
1

コンマを使用して、Python でシーケンスを自動的にアンパックできます。次の例では、リストを使用してさまざまな方法で割り当てを試しています。

>>> x = [1,2,3,4,5]
>>> a = x
>>> a
[1, 2, 3, 4, 5]
>>> a,b,c,d,e = x
>>> c
3
>>> e
5
>>> a, = x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

基本的に、代入演算子 ( ) の左側にコンマを含めるとすぐに=、右側のオペランドを自動的に「アンパック」しようとします。

したがって、特定の例のコンテキストでは、リストで次のようなことができます。

_First, _Second, Third, _Fourth, Fifth = ListOfFiveElements

編集:または、@drewkが彼の回答で指摘したように、_必要のないアンパックされた要素を「一致」させるために使用してください。

_, _, Third, _, Fifth = ListOfFiveElements

EDIT2:ああ、最後の注意として、代入演算子の右側にコンマを使用すると、右側のすべてのものをタプルにグループ化し、個別にアンパックします。したがって、次のコードは機能しません

>>> _, _, Third, _, Fifth = ListOfFiveElements,
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

これは、 から 1 項目のタプルを作成するためですListOfFiveElements。タプルは次のように単純に表され(ListOfFiveElements,)、アンパックされると、タプルの左側の残りの要素に割り当てられListOfFiveElementsます。したがって、Python はこれらをシーケンスにグループ化するため、コンマを含める場所に注意してください。__, Third, _, Fifth

于 2013-09-30T00:42:28.480 に答える