1. ホーム
  2. python

[解決済み] ヘッドとテールが一列に並ぶ

2022-11-15 21:51:16

質問

Pythonicな方法で、1つのコマンドでリストの最初の要素と "tail"を解凍する方法はありますか?

例えば

>> head, tail = **some_magic applied to** [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]

どのように解決するのですか?

Python 3.xでは、うまくできます。

>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]

3.x での新機能は * 演算子を使うことです。これは PEP 3132 - 拡張イテラブル・アンパッキング . これはまた、シーケンスだけでなく、任意のイテラブルで動作するという利点があります。

また、これは 本当に を読むことができます。

PEP で説明されているように、2.x で同等のことを (潜在的に一時的なリストを作ることなく) したい場合は、これを行う必要があります。

it = iter(iterable)
head, tail = next(it), list(it)

コメントにもあるように、これはまた head に対して例外をスローするのではなく、デフォルト値を取得する機会にもなります。この振る舞いを望むなら next() はデフォルト値を持つオプションの第二引数を取りますので next(it, None)None となります。

当然ながら、リストで作業している場合、3.xの構文がない最も簡単な方法は。

head, tail = seq[0], seq[1:]