質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1049閲覧

sortとsortedの挙動の違いについて

ifaoerij

総合スコア34

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/13 17:33

編集2020/10/13 17:43

下記のコードがエラーになる理由が理解できません。。。
sortをsortedに変更すると、うまく実行はできました。
メソッドの違いについては、調べましたが、
腹落ちしていない状態です。

リスト型のメソッドsort(): 元のリストをソート
組み込み関数sorted(): ソートした新たなリストを生成

book_list = ['ちいさなあなたへ',
'えんとつ町のプペル',
'はらぺこあおむし',
'おやすみ、ロジャー',
'じゃあじゃあびりびり']

sorted_book = sort(book_list)

for book in sorted_book:
print(book)

◆エラーログ

Traceback (most recent call last):
File "sorted_2.py", line 9, in <module>
sorted_book = sort(book_list)
NameError: name 'sort' is not defined

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

参考にするべきURLはこちらです

組み込み関数

python自体が持っている関数の事を指しており、sortedのみで利用出来る事を意味します

組み込みメソッド

class list([iterable])が持っている関数を意味します
なのでlistクラスのメソッドを使う場合だとlist.メソッド名という書き方が必要です

関数とメソッドを使い分けている文書では、関数=それ単体で呼び出せるものメソッド=Classが持っている関数と思っておけば大丈夫です

投稿2020/10/13 22:09

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ifaoerij

2020/10/14 02:27

ありがとうございます!理解できました!
hentaiman

2020/10/14 07:24

エラーの内容と破壊的・非破壊的は無関係だけど大丈夫ですか?
guest

0

ベストアンサー

関数は「非破壊的処理」と「破壊的処理」に分類されます。sortのようなメソッドも関数の一種です。

非破壊的処理は引数を変更しません。返り値で処理結果を表します。
破壊的処理は引数を変更します。非破壊的処理との誤用を避けるために、返り値はNoneなどになっている場合が多いです。

推奨されるのは非破壊的処理です。引数が変更されると、プログラミングで意識しておくべき要素が増え、複雑になるからです。しかし、一部の関数は、破壊的処理になっていたり、両方の処理があったり、オプションで処理を切り替えることができます。破壊的処理は、状況によってはコードが単純になるというメリットがあるからです。

sorted()は非破壊的処理、sort()は破壊的処理に該当します。

もっと単純な「加算」で例示してみましょう。非破壊的処理は+、破壊的処理は+=になります。それぞれメリット・デメリットがあることがわかるでしょう。

Python

1x = 5 2 3# 非破壊的処理 4y = x + 1 5print('x =', x) 6# x = 5 引数は変わらない 7print('y =', y) 8# y = 6 返り値が変わる 9z = (x + 1) - 2 10print('z =', z) 11# z = 4 関数を重ね合わせられる(返り値を引数にして、別の関数を呼び出せる) 12 13# 破壊的処理 14x += 1 # 記述はシンプルになる 15print('x =', x) 16# x = 6 引数が変わる 17# 18#y = (x += 1) 19# Syntax Error 返り値は未定義(Noneの場合あり) 20# 21#(x += 1) -= 2 22# Syntax Error 関数を重ね合わせることはできない

投稿2020/10/13 22:48

編集2020/10/13 22:51
toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ifaoerij

2020/10/14 02:27

ありがとうございます!理解できました!
guest

0

リストのsort()メソッドと、組み込み関数のsorted()の使い方は下記のようになります。

Python

1book_list1 = ['ちいさなあなたへ', 2'えんとつ町のプペル', 3'はらぺこあおむし', 4'おやすみ、ロジャー', 5'じゃあじゃあびりびり'] 6 7book_list2 = ['ちいさなあなたへ', 8'えんとつ町のプペル', 9'はらぺこあおむし', 10'おやすみ、ロジャー', 11'じゃあじゃあびりびり'] 12 13book_list1.sort() 14 15for book in book_list1: 16 print(book) 17 18print('=====') 19 20sorted_list = sorted(book_list2) 21 22for book in sorted_list: 23 print(book) 24 25# 出力結果 26# えんとつ町のプペル 27# おやすみ、ロジャー 28# じゃあじゃあびりびり 29# ちいさなあなたへ 30# はらぺこあおむし 31# ===== 32# えんとつ町のプペル 33# おやすみ、ロジャー 34# じゃあじゃあびりびり 35# ちいさなあなたへ 36# はらぺこあおむし

挙動、動作の違いについては下記サイトで詳しく説明されています。

Pythonでリストをソートするsortとsortedの違い

投稿2020/10/13 17:47

takutakuya

総合スコア979

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ifaoerij

2020/10/14 02:27

ありがとうございます!理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問