ラベル タプル の投稿を表示しています。 すべての投稿を表示
ラベル タプル の投稿を表示しています。 すべての投稿を表示

2022年5月7日土曜日

【組み込み関数】reversed、スライシングによるイテラブルオブジェクトの反転

 組み込み関数reversedはリストやタプルなどのイテラブルオブジェクトの要素の順番を逆にしたイテレーターを生成する。生成したイテレーターをイテラブルオブジェクトに変換することでイテラブルオブジェクトが反転する。また、スライシングでstepを-1とすることで後ろから要素が取得され、イテラブルオブジェクトの反転ができる。




1. reversedによるリスト、タプルの反転

 reversedはイテラブルオブジェクトの要素の順番を逆にしたイテレータを生成する。

a = [1, 2, 3]

print(reversed(a))

 実行結果

<list_reverseiterator object at 0x000001883EDBDF00>

 逆順のリストやタプルにする場合はlisttuple関数でイテラブルオブジェクトに変換する。

a = [1, 2, 3]

print(list(reversed(a)))

 実行結果

[3, 2, 1]


a = (1, 2, 3)

print(tuple(reversed(a)))

 実行結果

(3, 2, 1)


 元のリストやタプルは維持される。

a = [1, 2, 3]

print(list(reversed(a)))
print(a)

 実行結果

[3, 2, 1]
[1, 2, 3]


2. reversedによる文字列の反転

 文字列を反転させる場合、reversedで反転したイテレーターをリスト化する。

a = '123'

print(list(reversed(a)))

 実行結果

['3', '2', '1']


 このリストを文字列化するにはjoinを使う。

a = '123'

print(''.join(list(reversed(a))))

 実行結果

321


3. スライシングによるイテラブルオブジェクトの反転

 スライシングでstepに-1を指定すると「後ろから順に」イテラブルオブジェクトの要素を取得できる。これによりリスト、タプル、文字列を反転できる。

a = [1, 2, 3]

print(a[::-1])

 実行結果

['3', '2', '1']


a = (1, 2, 3)

print(a[::-1])

 実行結果

(3, 2, 1)


a = '123'

print(a[::-1])

 実行結果

321


4. リファレンス

Python 標準ライブラリ > 組み込み関数 > reversed(seq)

使用したバージョン:Python 3.10.4

2020年3月29日日曜日

【タプル】タプルの操作

 タプルはリスト同様、複数の値を一つの変数にまとめたイテラブルオブジェクト(要素をひとつずつ取り出せるオブジェクト)。リストと異なるのは値の変更・追加ができない点。そのため定数のような変更したくない値を入れておくのに用いられる。



タプルの書式とインデックスによる要素の指定

 タプルは値をカンマ(,)で区切り全体を()で囲う。

x = (1, 2, 3, 4, 5)


 値は数字や文字など型の違う要素が混在していても問題ない。

x = (1, 'りんご', 5.25)


 タプルの値はインデックスを指定することにより取得できる。インデックスは一連の要素に順番に0,1,2,・・・と順番を付けたもの。[]の中にインデックスを書き位置の指定ができる。
次の例ではインデックス2つまり3番目の要素を指定している。

x = (1, 2, 3, 4, 5)
print(x[2])

実行結果

3


 インデックスで範囲を指定する場合、コロンで区切って開始位置:終了位置を指定する。
次の例ではインデックス2(3番目の要素)からインデックス4(5番目の要素)の手前までを指定している。

x = (1, 2, 3, 4, 5)
print(x[2:4])

実行結果

(3, 4)


 後ろから位置を指定する場合はインデックスにマイナスをつける。
次の例ではインデックス-3(後ろから3番目の要素)からインデックス-1(5番目の要素)の手前までを指定している。

x = (1, 2, 3, 4, 5)
print(x[-3:-1])

実行結果

(3, 4)


 タプルはイミュータブル(変更不可)なので値を変更しようとするとエラーとなる。

x = (1, 2, 3, 4, 5)
x[4] = 7

実行結果

TypeError: 'tuple' object does not support item assignment


二次元以上のタプル

 複数のタプルを()で囲うと2次元以上のタプルを作ることができる。

x = ((1, 2, 3, 4, 5),(6, 7, 8, 9, 10))


 値の指定は次元の数の[]を使ってインデックスを指定する。
次の例ではインデックス[0]で一つ目の要素(1, 2, 3, 4, 5)を指定、インデックス[2]でその中の3番目の要素を指定している。

x = ((1, 2, 3, 4, 5),(6, 7, 8, 9, 10))
print(x[0][2])

実行結果

3


 3次元以上でも同様にインデックスを指定する。
次の例では[0]で一つ目の要素((11,12,13), 2, 3, 4, 5)を指定、次の[0]で一つ目の要素(11,12,13)を指定、[1]でその中の2番目の要素を指定している。

x = (((11,12,13), 2, 3, 4, 5),(6, 7, 8, 9, 10))
print(x[0][0][1])

実行結果

12


リファレンス

Python チュートリアル > 5.3. タプルとシーケンス

使用バージョン:Python 3.7.0