Python
 Computer >> コンピューター >  >> プログラミング >> Python

知っておきたい!Pythonの驚くべきハックテクニック集

Pythonは、豊富なライブラリのおかげで多くの興味深いことができる魅力的なプログラミング言語です。この記事では、日々のコーディングで役立つ、覚えておくと便利なPythonの定番テクニック(ハック)を、コード例とともにわかりやすく紹介します。

同じ文字を何度も繰り返し出力する

他の多くのプログラミング言語では、同じ文字を繰り返し出力するために、文字列を必要な回数分書き並べたり、回数が多い場合にはループ処理を記述したりするのが一般的です。しかしPythonには、こうした繰り返し文字の出力をたった1行で実現できる仕組みが備わっています。

文字列に対して「* 回数」と記述するだけで、その文字列を指定した回数だけ繰り返すことができます。

サンプルコード

print('I love program at tutorials point ' + 'TP' * 4);

出力結果

I love program at tutorials point TPTPTPTP

リストの要素をいろいろな方法で出力する

Pythonのリストは、異なる型のデータを混在させられる配列のようなものです。リストの要素を出力する方法は複数ありますが、デフォルトのprint()でそのまま出力すると、角括弧([ ])やシングルクォート(' ')まで一緒に表示されてしまいます。

そこで活躍するのがjoin()メソッドです。join()はリストを文字列に変換するメソッドで、呼び出し元の文字列(区切り文字)でリストの各要素を連結してくれます。具体的な動作を見てみましょう。

サンプルコード

bikes = ['thunderbird', 'Pulsar', 'R15', 'Duke']

# 従来の方法でリストを出力
print('Bikes are :', bikes)

# join()メソッドを使ってリストを出力
print('Bikes are : %s' % ','.join(bikes))
print('Bikes are : ', (' and '.join(bikes)))

出力結果

Bikes are : ['thunderbird', 'Pulsar', 'R15', 'Duke']
Bikes are : thunderbird,Pulsar,R15,Duke
Bikes are : thunderbird and Pulsar and R15 and Duke

複数のリストを同時に出力する(zip)

Pythonには、複数のリストの要素をペアとして同時に取り出して出力する方法もあります。zip()関数を使うと、同じ長さの2つのリストを、対応する要素ごとのペアにまとめることができます。

サンプルコード

bikes = ['thunderbird', 'Pulsar', 'R15', 'Duke']
speed = ['142', '135', '137', '145']

for bike, maxspeed in zip(bikes, speed):
    print(bike, maxspeed)

出力結果

thunderbird 142
Pulsar 135
R15 137
Duke 145

値を入れ替えるショートハンド(変数のスワップ)

Pythonには、2つの変数の値を入れ替えるための組み込みの省略記法があります。一時的な作業用変数を用意しなくても、1行でスマートに値をスワップできるのが魅力です。実際の動作を見てみましょう。

サンプルコード

value1 = 325
value2 = 976

print('value1 = ', value1)
print('value2 = ', value2)

value1, value2 = value2, value1

print('\nSwapped values')
print('value1 = ', value1)
print('value2 = ', value2)

出力結果

value1 = 325
value2 = 976

Swapped values
value1 = 976
value2 = 325

文字列を逆順にする

Pythonでは、スライスのステップに-1を指定するだけで、文字列を簡単に反転できます。数値の場合でも、一度文字列に変換すれば同じ方法で桁を反転できます。

サンプルコード

value1 = 'Hello! Welcome to tutorials point'
print(value1[::-1])

number = 934827165303
print(int(str(number)[::-1]))

出力結果

tniop slairotut ot emocleW !olleH
303561728439

関数から複数の値を返す

Pythonの関数は、複数の値を同時に返すことができます。戻り値をカンマで区切って並べるだけで、タプルとして複数の値を受け取れるのです。

サンプルコード

def multiple():
    return 1 * 3, 2 * 3, 3 * 3, 4 * 3, 5 * 3

val1, val2, val3, val4, val5 = multiple()
print(val1, val2, val3, val4, val5)

出力結果

3 6 9 12 15

for-inループでインデックスと値を同時に取得する

Pythonでfor-inループを使うと、通常は値だけが取得されます。インデックス番号にもアクセスしたい場合は、enumerate()関数を使いましょう。enumerate()は、インデックスと値をセットで返してくれる便利な関数です。

サンプルコード

bikes = ['thunderbird', 'Pulsar', 'R15', 'Duke']

for i, bike in enumerate(bikes):
    print(i, bike)

出力結果

0 thunderbird
1 Pulsar
2 R15
3 Duke

スライス操作でリストを柔軟に切り出す

スライス操作を使うと、リストから任意の範囲の要素を自由に取り出せます。開始位置・終了位置・ステップを指定でき、負のステップを指定すれば逆順の取得も可能です。

サンプルコード

bikes = ['thunderbird', 'Pulsar', 'R15', 'Duke', 'S1000RR']
print(bikes[0:3])   # 先頭から3つの要素を出力
print(bikes[::2])   # 1つおきの要素を出力
print(bikes[::-1])  # 逆順のリストを出力
print(bikes[::-2])  # 逆順かつ1つおきの要素を出力

出力結果

['thunderbird', 'Pulsar', 'R15']
['thunderbird', 'R15', 'S1000RR']
['S1000RR', 'Duke', 'R15', 'Pulsar', 'thunderbird']
['S1000RR', 'R15', 'thunderbird']

文字列をリストに変換する

スペース区切りの数値文字列などを、整数のリストに変換したい場面はよくあります。split()で文字列を分割し、map(int, ...)で各要素を整数に変換、さらにlist()でリスト化すれば、簡単に実現できます。

サンプルコード

name = '3 34 67 12 78'
converted_list = list(map(int, name.split()))
print(converted_list)

出力結果

[3, 34, 67, 12, 78]

ネストしたリストをフラットな1次元リストに変換する

Pythonでは、多次元(ネストされた)リストを1次元のリストへ変換できます。itertoolsモジュールのchain.from_iterable()を使うと、リストの中のリストから順に要素を取り出し、最後の要素までひと続きのフラットなリストにしてくれます。

サンプルコード

import itertools

dob = [[3, 30], [6, 12], [8, 17]]
print(dob)

dates = list(itertools.chain.from_iterable(dob))
print(dates)

出力結果

[[3, 30], [6, 12], [8, 17]]
[3, 30, 6, 12, 8, 17]

これらのテクニックを活用すれば、Pythonコードをより簡潔で読みやすく書けるようになります。ぜひ実際のコーディングで試してみてください。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. PythonでQuine(クワイン)プログラムを書いてみよう

    「Quine(クワイン)」とは、入力を一切受け取らずに、自分自身のソースコードを出力する特殊なプログラムのことです。一見すると不思議な自己言及的な仕組みですが、実装にはいくつかの厳格なルールがあります。最も重要な条件は、プログラム内部からソースコードファイルを読み込んではいけないという点です。つまり、純粋にコード自身の論理だけで自分の内容を再現しなければなりません。 サンプルコード Pythonでは、わずか1行でQuineを実現できます。 a=a=%r;print (a%%a);print (a%a) 実行結果 a=a=%r;print (a%%a);print (a%a) ご覧のとお