プログラマー必見!Python開発に役立つ実用的なヒントとコツ集
本記事では、競技プログラミングや業務でのコーディングに役立つ、実用的なPythonのテクニックをご紹介します。これらのコツを活用すれば、コード量を削減しながら実行効率を最適化でき、より簡潔で読みやすいプログラムを書けるようになります。
1. 2つの変数の値をその場で入れ替える(スワップ)
一時変数を使わずに、タプルのアンパックを利用して値を交換できます。これはPythonらしい書き方の代表例です。
x, y = 50, 70 print(x, y) # 値の入れ替え x, y = y, x print(x, y)
出力結果
50 70 70 50
2. リストから1つの文字列を作成する
join()メソッドを使えば、リスト内の複数の文字列要素を簡単に連結できます。区切り文字も自由に指定可能です。
lst = ['What', 'a', 'fine', 'morning']
print(" ".join(lst))出力結果
What a fine morning
3. リストから重複要素を削除する
set()を使う方法はシンプルですが、元の順序は保持されません。順序を維持したい場合は、collectionsモジュールのOrderedDict.fromkeys()を活用しましょう。
# set()を使う方法(順序は保持されない)
lst = [2, 4, 4, 9, 13, 4, 2]
print("元のリスト: ", lst)
new_lst = list(set(lst))
print(new_lst)
# OrderedDictを使う方法(順序を保持)
from collections import OrderedDict
lst = [2, 4, 4, 9, 13, 4, 2]
print(list(OrderedDict.fromkeys(lst).keys()))出力結果
元のリスト: [2, 4, 4, 9, 13, 4, 2] [9, 2, 4, 13] [2, 4, 9, 13]
なお、Python 3.7以降では通常のdictも挿入順を保持するため、list(dict.fromkeys(lst))でも同様の結果が得られます。
4. 文字列を逆順にする
スライス記法 [::-1] を使うことで、文字列を簡単に反転できます。回文判定などにも応用できる便利なテクニックです。
s = "Hello, World!" print(s[::-1]) letters = "abcdefghijklmnopqrstuvwxyz" print(letters[::-1])
出力結果
!dlroW ,olleH zyxwvutsrqponmlkjihgfedcba
5. リストを逆順にする
文字列と同様に、リストにもスライス記法が使えます。元のリストを変更せずに新しいリストとして取得できるのがポイントです。
lst = [20, 40, 60, 80] print(lst[::-1])
出力結果
[80, 60, 40, 20]
6. 2次元配列(行列)を転置する
zip(*matrix) のアスタリスクによる引数展開を組み合わせると、行と列を入れ替えた転置行列を1行で作成できます。例えば2×3の行列は、転置すると3×2の行列になります。
matrix = [['a', 'b', 'c'], ['d', 'e', 'f']] transMatrix = zip(*matrix) print(list(transMatrix))
出力結果
[('a', 'd'), ('b', 'e'), ('c', 'f')]7. 2つの文字列がアナグラムかどうか判定する
collections.Counterを使って各文字の出現回数を比較することで、アナグラム(並べ替えて同じになる文字列)かどうかを簡潔に判定できます。
from collections import Counter
def is_anagram(str1, str2):
return Counter(str1) == Counter(str2)
print(is_anagram('hello', 'ollhe'))
# 大文字小文字は区別されるため False になる
print(is_anagram('Hello', 'hello'))出力結果
True False
8. オブジェクトの属性やメソッドを調べる
dir()関数を使うと、オブジェクトが持つすべての属性名やメソッド名を一覧表示できます。APIの仕様を素早く確認したいときに非常に便利です。
lst = [1, 3, 4, 7, 9] print(dir(lst))
出力結果
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
9. enumerate()でリストをインデックス付きで処理する
enumerate()を使えば、forループで要素と同時にインデックス番号も取得できます。range(len(lst))と書くよりも可読性が高くなります。
lst = [20, 10, 40, 50, 30, 40]
for i, value in enumerate(lst):
print(i, ': ', value)出力結果
0 : 20 1 : 10 2 : 40 3 : 50 4 : 30 5 : 40
10. 数値の階乗を計算する
functools.reduce()とlambda式を組み合わせることで、階乗計算を1行で表現できます。関数型プログラミング的なアプローチです。
import functools result = (lambda s: functools.reduce(int.__mul__, range(1, s + 1), 1))(5) print(result)
出力結果
120
なお、実務では math.factorial(5) を使うか、再帰・ループで実装する方が一般的で読みやすいでしょう。
11. 2つの関連するシーケンスから辞書を作成する
zip()とdict()を組み合わせれば、キーとなるタプルと値となるタプルから、対応関係を持つ辞書を瞬時に生成できます。
x1 = ('Name', 'EmpId', 'Sector')
y1 = ('Zack', 4005, 'Finance')
print(dict(zip(x1, y1)))出力結果
{'Name': 'Zack', 'EmpId': 4005, 'Sector': 'Finance'}まとめ
今回ご紹介したテクニックは、いずれもPythonの標準機能だけで実現できるものばかりです。タプルのアンパック、スライス記法、zip()、Counter、OrderedDictなどを上手に使いこなすことで、コードを大幅に短縮しながらパフォーマンスも向上させられます。日々のコーディングや競技プログラミングでぜひ活用してみてください。
-
知らないと損をする?iPhone電卓アプリを使いこなす7つの便利ワザ
iPhoneの標準電卓アプリは、基本的な計算であれば特別な知識がなくても誰でも使えます。しかし、実はあまり知られていない隠れた機能がいくつも搭載されていることをご存じでしょうか。 この記事では、iPhoneの電卓アプリをより効率的に使いこなすための便利なヒントとコツを7つ紹介します。 1. スワイプして数字を削除する iPhoneの電卓にはバックスペース(一文字削除)ボタンがありません。そのため、計算中に誤った数字を入力すると、最初からやり直さなければならないと思い込んでいる人が少なくありません。しかし、それは誤解です。 実はiPhoneの電卓には、最後に入力した数字だけを削除できる隠しジェ
-
知っておくと差がつく!PowerPointの便利なヒント&コツ5選
PowerPointは、ビジネス提案やプレゼンテーション、さらには人事評価の場面でも活躍する欠かせないツールです。使いこなすには時間と練習が必要ですが、実はあまり知られていない隠れた機能を活用することで、より効率的に、より魅力的な資料を作成できるようになります。今回は、PowerPointで今すぐ使える実用的なテクニックを5つご紹介します。1. クイックアクセスツールバー(QAT)を活用するクイックアクセスツールバーは、よく使う機能をワンクリックで呼び出せる「お気に入りの引き出し」のような存在です。初期状態では「上書き保存」「繰り返し」「元に戻す」「最初から表示」のコマンドが登録されています。