Untuk menjelaskan mengapa daftar tidak dicetak "dengan benar", print(["Sam"])panggilan repr("Sam"), yang mengembalikan 'Sam'(dengan tanda kutip), tidak seperti saat Anda memanggil print("Sam")dan panggilan python str("Sam")yang kembali Sam(tanpa tanda kutip). Lihat perbedaan antara strdanrepr atau Python strdan lists untuk info lebih lanjut.
Ini menggunakan map()fungsi untuk memanggil str untuk setiap elemen mylist , membuat daftar string baru yang kemudian digabungkan menjadi satu string dengan str.join(). Kemudian, %operator pemformatan string menggantikan string dalam alih-alih %sdalam "[%s]".
Terima kasih, itu berfungsi dengan baik. Bisakah Anda menjelaskan sedikit secara detail tentang apa yang Anda lakukan di baris kedua? Saya baru mengenal python.
Obaid
19
Dia menggunakan mapfungsi untuk memanggil strsetiap elemen mylist, membuat daftar string baru yang kemudian dia gabungkan menjadi satu string str.join. Kemudian, dia menggunakan %operator pemformatan string untuk menggantikan string di %sdalam "[%s]".
li.davidm
6
Cara lain untuk melakukannya yang mungkin sedikit lebih modern: "[{0}]".format(", ".join(str(i) for i in mylist))
Jack O'Connor
2
saya cenderung lebih suka map(f, xs)(atau imapdi python2.x) daripada (f(x) for x in xs), ketika fcallable yang telah ditentukan; yang cenderung mengeksekusi bytecode lebih sedikit, dan biasanya lebih kompak. Tentu tidak itumap(lambda x:..., xs) jauh lebih buruk daripada(... for x in xs)
SingleNegationElimination
1
@ user1767754: benarkah? Tautan?
SingleNegationElimination
18
Ini adalah kode sederhana, jadi jika Anda baru, Anda harus memahaminya dengan cukup mudah.
mylist =["x",3,"b"]for items in mylist:print(items)
Ini mencetak semuanya tanpa tanda kutip, seperti yang Anda inginkan.
Saya bingung dengan ini. Apakah tipe data yang panjang memfilter daftar?
dval
Versi yang lebih ringkas adalahprint(end='['); print(*l, sep=', ', end=']\n')
Anonim
9
Alih-alih menggunakan map, saya merekomendasikan menggunakan ekspresi generator dengan kemampuan joinuntuk menerima iterator:
def get_nice_string(list_or_iterator):return"["+", ".join( str(x)for x in list_or_iterator)+"]"
Di sini, joinadalah fungsi anggota kelas string str. Dibutuhkan satu argumen: daftar (atau iterator) string, lalu mengembalikan string baru dengan semua elemen yang digabungkan oleh, dalam hal ini ,,.
Pengoptimalan yang baik untuk Python 2, karena map mengembalikan daftar di 2.x. Ini mengembalikan generator di 3.x, jadi tidak banyak membantu di sana.
Tom Zych
7
Saya akan kembali", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem
@eyquem: Pintar, saya belum pernah melihat join digunakan seperti itu sebelumnya. Namun, itu sedikit lebih buram bagi pemula (karena Anda menggunakan properti bahwa string adalah wadah berulang dari string satu karakter).
Seth Johnson
6
Anda dapat menghapus semua karakter yang tidak diinginkan dari string menggunakan translate()metode dengan Noneuntuk tableargumen diikuti dengan string yang berisi karakter yang ingin Anda hapus untuk deletecharsargumennya.
Jika Anda menggunakan versi Python sebelum 2.6, Anda harus menggunakan fungsi stringmodul translate()sebagai gantinya karena kemampuan untuk meneruskan Nonesebagai tableargumen tidak ditambahkan hingga Python 2.6. Menggunakannya terlihat seperti ini:
@eyquem: Ya, menghindari penghapusan karakter yang sebenarnya merupakan bagian dari data Anda (bukan hanya digunakan untuk membatasi) secara alami akan membutuhkan logika yang sedikit lebih rumit / berbeda jika memungkinkan.
martineau
3
Berikut adalah sesi interaktif yang menampilkan beberapa langkah dalam satu baris @ TokenMacGuy. Pertama, dia menggunakan mapfungsi untuk mengubah setiap item dalam daftar menjadi string (sebenarnya, dia membuat daftar baru, bukan mengubah item di daftar lama). Kemudian dia menggunakan metode string joinuntuk menggabungkan string-string itu di ', 'antara mereka. Sisanya hanya pemformatan string, yang cukup mudah. (Sunting: contoh ini mudah; pemformatan string secara umum bisa agak rumit.)
Perhatikan bahwa menggunakan joinadalah cara sederhana dan efisien untuk membuat string dari beberapa substring, jauh lebih efisien daripada melakukannya dengan menambahkan string ke string secara berturut-turut, yang melibatkan banyak penyalinan di belakang layar.
>>> mylist =['x',3,'b']>>> m = map(str, mylist)>>> m
['x','3','b']>>> j =', '.join(m)>>> j
'x, 3, b'
Itu hanya menggunakan formatmetode. Tidak ada jejak str, dan ini memungkinkan penyempurnaan format elemen. Misalnya, jika Anda memiliki angka float sebagai elemen daftar, Anda dapat menyesuaikan formatnya, dengan menambahkan penentu konversi, dalam hal ini:.2f
print(["Sam"])
panggilanrepr("Sam")
, yang mengembalikan'Sam'
(dengan tanda kutip), tidak seperti saat Anda memanggilprint("Sam")
dan panggilan pythonstr("Sam")
yang kembaliSam
(tanpa tanda kutip). Lihat perbedaan antarastr
danrepr
atau Pythonstr
danlist
s untuk info lebih lanjut.Jawaban:
Dengan Python 2:
Di Python 3 (di mana
print
ada fungsi bawaan dan bukan fitur sintaks lagi):Keduanya kembali:
Ini menggunakan
map()
fungsi untuk memanggil str untuk setiap elemen mylist , membuat daftar string baru yang kemudian digabungkan menjadi satu string denganstr.join()
. Kemudian,%
operator pemformatan string menggantikan string dalam alih-alih%s
dalam"[%s]"
.sumber
map
fungsi untuk memanggilstr
setiap elemenmylist
, membuat daftar string baru yang kemudian dia gabungkan menjadi satu stringstr.join
. Kemudian, dia menggunakan%
operator pemformatan string untuk menggantikan string di%s
dalam"[%s]"
."[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)
(atauimap
di python2.x) daripada(f(x) for x in xs)
, ketikaf
callable yang telah ditentukan; yang cenderung mengeksekusi bytecode lebih sedikit, dan biasanya lebih kompak. Tentu tidak itumap(lambda x:..., xs)
jauh lebih buruk daripada(... for x in xs)
Ini adalah kode sederhana, jadi jika Anda baru, Anda harus memahaminya dengan cukup mudah.
Ini mencetak semuanya tanpa tanda kutip, seperti yang Anda inginkan.
sumber
Hanya menggunakan cetak:
sumber
Jika Anda menggunakan Python3:
sumber
print(end='['); print(*l, sep=', ', end=']\n')
Alih-alih menggunakan
map
, saya merekomendasikan menggunakan ekspresi generator dengan kemampuanjoin
untuk menerima iterator:Di sini,
join
adalah fungsi anggota kelas stringstr
. Dibutuhkan satu argumen: daftar (atau iterator) string, lalu mengembalikan string baru dengan semua elemen yang digabungkan oleh, dalam hal ini,
,.sumber
", ".join( str(x) for x in list_or_iterator).join('[]')
Anda dapat menghapus semua karakter yang tidak diinginkan dari string menggunakan
translate()
metode denganNone
untuktable
argumen diikuti dengan string yang berisi karakter yang ingin Anda hapus untukdeletechars
argumennya.Jika Anda menggunakan versi Python sebelum 2.6, Anda harus menggunakan fungsi
string
modultranslate()
sebagai gantinya karena kemampuan untuk meneruskanNone
sebagaitable
argumen tidak ditambahkan hingga Python 2.6. Menggunakannya terlihat seperti ini:Menggunakan
string.translate()
fungsi ini juga akan berfungsi di 2.6+, jadi menggunakannya mungkin lebih disukai.sumber
lst = ["it isn't", 3, 'b']
==>["it isnt", 3, b]
dan juga denganlst = ['it isn\'t', 3, 'b']
Berikut adalah sesi interaktif yang menampilkan beberapa langkah dalam satu baris @ TokenMacGuy. Pertama, dia menggunakan
map
fungsi untuk mengubah setiap item dalam daftar menjadi string (sebenarnya, dia membuat daftar baru, bukan mengubah item di daftar lama). Kemudian dia menggunakan metode stringjoin
untuk menggabungkan string-string itu di', '
antara mereka. Sisanya hanya pemformatan string, yang cukup mudah. (Sunting: contoh ini mudah; pemformatan string secara umum bisa agak rumit.)Perhatikan bahwa menggunakan
join
adalah cara sederhana dan efisien untuk membuat string dari beberapa substring, jauh lebih efisien daripada melakukannya dengan menambahkan string ke string secara berturut-turut, yang melibatkan banyak penyalinan di belakang layar.sumber
Menggunakan
.format
untuk pemformatan string,Keluaran:
Penjelasan:
map
digunakan untuk memetakan setiap elemen dari daftar yang akanstring
diketik.,
sebagai pemisah.[
dan]
dalam pernyataan cetak untuk menunjukkan kurung kurawal daftar.Referensi:
.format
untuk pemformatan string PEP-3101sumber
.format
cara yang paling pythonic. Tapi, tentu saja, saya menerima ketidaksetujuan. ;)Saya terinspirasi oleh @AniMenon untuk menulis solusi pythonic yang lebih umum.
Itu hanya menggunakan
format
metode. Tidak ada jejakstr
, dan ini memungkinkan penyempurnaan format elemen. Misalnya, jika Anda memiliki angka float sebagai elemen daftar, Anda dapat menyesuaikan formatnya, dengan menambahkan penentu konversi, dalam hal ini:.2f
Outputnya cukup baik:
sumber