Saya sudah dapat memverifikasi bahwa findUniqueWords
hasil tidak diurutkan list
. Namun, itu tidak mengembalikan daftar. Mengapa?
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
theSet= set(theList)
Dan Anda selesai, Anda hanya perlu mengembalikannya ke daftar:theList = list(theSet)
Selesai. Mudah.theSet' into a sorted list with
diurutkan (theSet) `.Jawaban:
list.sort
mengurutkan daftar di tempat, yaitu tidak mengembalikan daftar baru. Cukup tulissumber
return sorted(newList)
lebih pendek. Tidak masalah di sini karena variabelnya lokal, tetapi pengurutan di tempat dapat mengubah variabel bersama dalam beberapa kasus.a.append('x')
, ataua.extend('x)
Anda tidak dapat membuat rantaisort()
di bagian akhir. Itu harus dibagi menjadi 2 baris. Itu akan lebih baik jika metode mengembalikan daftar! docs.python.org/3/tutorial/datastructures.html Pesan yang sama menggigit saya dengan melakukan hal itu. Akibatnya Anda harus memecahnya menjadi dua baris, Anda harus menggunakan.sort()
TIDAKsorted()
pada daftar setelahnya, karena ini menghasilkan kesalahan yang samal = ['1']; l = sorted(l.append('2'))
(saya baru saja menambahkan semi-kolon sehingga Anda dapat memotong / menempel dan menjalankan)sort
fungsi dirancang dengan cara ini? apakah ada overhead kinerja atau kelemahan lain jika mengembalikan daftar yang diurutkan alih-alih Tidak Ada?print(newList.sort())
memberiNone
. Namun ketika saya melakukannya,newList.sort()
dan kemudianprint(newList)
berhasil.Masalahnya ada di sini:
sort
tidak mengembalikan daftar yang diurutkan; alih-alih, ini mengurutkan daftar pada tempatnya.Menggunakan:
sumber
list.sort()
dansorted(list)
.Berikut ini adalah email dari Guido van Rossum dalam daftar dev Python menjelaskan mengapa ia memilih untuk tidak kembali
self
pada operasi yang mempengaruhi objek dan tidak mengembalikan yang baru.sumber
split(":").lower()
adalah rantai buruk karenasplit
mengembalikan daftar yang tidak memilikilower
metode.Python biasa kembali
None
dari fungsi dan metode yang bermutasi data, sepertilist.sort
,list.append
, danrandom.shuffle
, dengan gagasan bahwa hal itu mengisyaratkan fakta bahwa itu bermutasi.Jika Anda ingin mengambil iterable dan mengembalikan daftar item yang baru diurutkan, gunakan
sorted
fungsi builtin.sumber
Python memiliki dua macam: metode sortir (atau "fungsi anggota") dan fungsi sortir . Metode pengurutan beroperasi pada konten objek bernama - menganggapnya sebagai tindakan yang diambil objek untuk memesan ulang sendiri . Fungsi sortir adalah operasi atas data yang diwakili oleh suatu objek dan mengembalikan objek baru dengan konten yang sama dalam urutan diurutkan.
Diberikan daftar bilangan bulat bernama
l
daftar itu sendiri akan disusun ulang jika kita memanggill.sort()
:Metode ini tidak memiliki nilai balik. Tetapi bagaimana jika kita mencoba menetapkan hasil
l.sort()
?r
sekarang sama dengan tidak ada. Ini adalah salah satu dari detail-detail aneh dan agak menjengkelkan yang mungkin akan dilupakan oleh seorang programmer setelah periode ketidakhadiran dari Python (itulah sebabnya saya menulis ini, jadi saya tidak lupa lagi).Fungsi
sorted()
, di sisi lain, tidak akan melakukan apa pun untuk isil
, tetapi akan mengembalikan daftar baru yang disortir dengan konten yang sama sepertil
:Sadarilah bahwa nilai yang dikembalikan adalah tidak sebuah salinan dalam , jadi berhati-hati tentang operasi sisi-effecty atas unsur-unsur yang terkandung dalam daftar seperti biasa:
sumber
Untuk memahami mengapa itu tidak mengembalikan daftar:
sort () tidak mengembalikan nilai apapun sementara jenis () metode hanya macam elemen dari daftar yang diberikan dalam urutan tertentu - naik atau turun tanpa kembali nilai apapun.
Jadi masalahnya adalah di
answer = newList.sort()
mana jawabannya tidak ada.Sebaliknya Anda bisa melakukannya
return newList.sort()
.Sintaks metode sort () adalah:
Atau, Anda juga dapat menggunakan fungsi bawaan Python yang diurutkan () untuk tujuan yang sama.
Catatan: Perbedaan paling sederhana antara sort () dan sortir () adalah: sort () tidak mengembalikan nilai apa pun, disortir () mengembalikan daftar iterable.
Jadi dalam kasus Anda
answer = sorted(newList)
.sumber
jika Anda masih ingin menggunakan sort, Anda dapat melakukan ini.
sumber