LoginSignup
3
1

More than 1 year has passed since last update.

ChatGPTにPythonの便利な裏技を10個教わってみた

Last updated at Posted at 2022-12-08

ChatGPTを試してみた。
日本語でも対応してることにびっくり。

僕「Pythonエンジニアが知っておくと便利な裏技を10個教えて」

以下、ChatGPT氏の回答
※記入が途中で止まった場合は「続けて」を入力。今回の10項目出力に「続けて」は3回打ち込んだ。


Pythonでは、文字列やリストなどのシーケンス型を逆順に並べるには、内置関数のreversed()を使うことができます。例えば、以下のように使用します。

文字列を逆順に並べる

string = "Hello, world!"
reversed_string = "".join(reversed(string))
print(reversed_string) # 結果: !dlrow ,olleH

リストを逆順に並べる

numbers = [1, 2, 3, 4, 5]
reversed_numbers = list(reversed(numbers))
print(reversed_numbers) # 結果: [5, 4, 3, 2, 1]
Pythonでは、変数の値を入れ替えることができます。例えば、以下のように使用します。

変数の値を入れ替える

a = 10
b = 20

変数aと変数bの値を入れ替える

a, b = b, a
print(a) # 結果: 20
print(b) # 結果: 10
Pythonでは、with文を使用すると、ファイルやコネクションなどのリソースを使用する際に、自動的にクリーンアップ処理を行うことができます。例えば、以下のように使用します。

ファイルを開く

with open("test.txt", "w") as f:
# ファイルに書き込む
f.write("Hello, world!")

with文を抜けると、自動的にファイルが閉じられる

Pythonでは、enumerate()関数を使用すると、シーケンス型のデータに対して、要素の番号と値を同時に取得することができます。例えば、以下のように使用します。

リストから要素と番号を同時に取得する

for i, item in enumerate(["apple", "banana", "orange"]):

Pythonでは、zip()関数を使用すると、複数のシーケンス型のデータを同時に反復処理することができます。例えば、以下のように使用します。

複数のシーケンスを同時に反復処理する

for item1, item2 in zip(["apple", "banana", "orange"], [1, 2, 3]):
print(item1, item2)

結果:
apple 1
banana 2
orange 3

Pythonでは、defaultdictというクラスを使用すると、辞書型のデータを作成する際に、存在しないキーに対してもデフォルト値を返すことができます。例えば、以下のように使用します。

defaultdictを使用する

from collections import defaultdict

辞書型を作成する

d = defaultdict(int)

存在しないキーを参照する

print(d["key"]) # 結果: 0

存在するキーを参

Pythonでは、functools.partial()関数を使用すると、既存の関数を部分的に適用することができます。例えば、以下のように使用します。
from functools import partial

関数を定義する

def add(x, y, z):
return x + y + z

関数を部分的に適用する

add_10 = partial(add, 10)

関数を実行する

result = add_10(20, 30)
print(result) # 結果: 60
Pythonでは、itertoolsモジュールには、多くの便利なイテレータ操作を行うための関数が定義されています。例えば、以下のように使用します。
from itertools import groupby

リストを作成する

numbers = [1, 1, 2, 3, 3, 3, 4, 5, 5]

同じ値を持つ要素をまとめて反復処理する

for key, group in groupby(numbers):
print(key, list(group))

結果:
1 [1, 1]
2 [2]
3 [3, 3, 3]
4 [4]
5 [5, 5]

Pythonでは、デコレータを使用すると、既存の関数に別の機能を追加することができます。例えば、以下のように使用します。
Copy code

デコレータを定義する

def my_decorator(func):
def wrapper():
print("Before function")
func()
print("After function")
return wrapper

デコレータを適用する

@my_decorator
def hello():
print("Hello, world!")

関数を実行する

hello()

結果:
Before function
Hello, world!
After function

Pythonでは、functools.lru_cacheデコレータを使用すると、関数の呼び出し結果をキャッシュすることができます。これにより、再度同じ引数で関

を呼び出した際に、高速に結果を返すことができます。例えば、以下のように使用します。

from functools import lru_cache

関数を定義する

@lru_cache()
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)

関数を実行する

print(fibonacci(10)) # 結果: 55
また、lru_cacheデコレータは、キャッシュの最大サイズを指定することができます。例えば、以下のように使用します。

関数を定義する

@lru_cache(maxsize=128)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)

関数を実行する

print(fibonacci(10)) # 結果: 55
上記のように、Pythonには様々な便利な裏技があります。学習を進める中で、そのような技術を積極的に取り入れることで、Pythonプログラミングのスキルを磨くことができます。


ここまで。
上記文章で、僕の方で手を入れたのは
(1)貼り付けるとついてくる、Copy codeを何か所か削除した。
(2) マークダウンの「#」を「#####」に置換した。
という2点のみで、時間としては7分程度。

手作業でやってしまったが、一括置換をすればもっと秒殺だったな…。
まだ見やすい形になっていないので、次はその点も改善できるか試してみよう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1