findUniqueWords
がソートされたlist
になることを確認できました。ただし、return
the list
ではないのはなぜですか?
def findUniqueWords(theList):
newList = []
words = []
# Read a line at a time
for item in theList:
# Remove any punctuation from the line
cleaned = cleanUp(item)
# Split the line into separate words
words = cleaned.split()
# Evaluate each Word
for Word in words:
# Count each unique Word
if Word not in newList:
newList.append(Word)
answer = newList.sort()
return answer
list.sort
はリストを所定の位置にソートします。つまり、新しいリストを返しません。書くだけ
newList.sort()
return newList
問題はここにあります:
answer = newList.sort()
sort
は、ソートされたリストを返しません。むしろ、リストを所定の位置に並べ替えます。
つかいます:
answer = sorted(newList)
こちら は、Pythonの開発者リストにあるGuido van Rossumからのメールです。オブジェクトに影響を与え、新しいものを返さない操作でself
を返さない理由を説明しています。
これは、単一のオブジェクトに対する一連の副作用を次のように連鎖させることができるコーディングスタイル(他のさまざまな言語で人気があり、特にLISPがおもしろいと思います)に由来します。
x.compress().chop(y).sort(z)
これは同じだろう
x.compress() x.chop(y) x.sort(z)
連鎖は読みやすさに対する脅威だと思います。読者が各方法に精通している必要があります。 2番目の形式は、これらの各呼び出しが同じオブジェクトに作用することを明確にしているので、クラスとそのメソッドをよく知らなくても、2番目と3番目の呼び出しがxに適用されることを理解できます(そしてすべての呼び出しは副作用のために行われます)、他の呼び出しではありません。
文字列処理操作など、新しい値を返す操作のチェーンを予約します。
y = x.rstrip("\n").split(":").lower()
Pythonには、ソートmethod(または「メンバー関数」)とソートfunctionの2種類のソートがあります。 sortメソッドは、という名前のオブジェクトの内容を操作します-それを考えるオブジェクトがそれ自体を再配列するために取っているアクション。ソート関数はオブジェクトによって表されるデータに対する操作であり、ソートされた順序で同じ内容の新しいオブジェクトを返します。
l
という名前の整数のリストを指定すると、l.sort()
を呼び出すと、リスト自体の順序が変更されます。
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
このメソッドには戻り値がありません。しかし、l.sort()
の結果を割り当てようとするとどうなりますか?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
は、実際には何も等しくなりません。これは、プログラマーがPythonから一定期間欠席すると忘れがちな、奇妙でやや面倒な詳細の1つです(これが私がこれを書いている理由ですI =再度忘れないでください)。
一方、関数sorted()
は、l
の内容に対しては何も行いませんが、l
と同じ内容の新しいソート済みリストを返します。
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
返される値はnot a deep copy であるため、通常どおりリスト内に含まれる要素に対する副作用のある操作には注意してください。
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]
Pythonは、list.sort
、list.append
、random.shuffle
などのデータを変更する関数とメソッドからNone
を習慣的に返します。変異していた。
反復可能を取り、そのアイテムの新しいソート済みリストを返す場合は、sorted
組み込み関数を使用します。
リストを返さない理由を理解するには:
sort()はwhile値を返しません。
Sort()メソッドは、特定のリストの要素を特定の順序(値を返さずに昇順または降順)で並べ替えるだけです。
そのため、問題はanswer = newList.sort()
にあり、答えはありません。
代わりにreturn newList.sort()
を行うことができます
Sort()メソッドの構文は次のとおりです。
list.sort(key=..., reverse=...)
または、同じ目的でPythonの組み込み関数sort()を使用することもできます。
sorted(list, key=..., reverse=...)
注:sort()とsort()の最も単純な違いは、sort()は値を返さない一方で、sorted()は反復可能なリストを返すことです。
あなたの場合answer = sorted(newList)