Jadi saya punya daftar:
['x', 3, 'b']
Dan saya ingin hasilnya menjadi:
[x, 3, b]
Bagaimana saya bisa melakukan ini dengan python?
Jika saya melakukannya str(['x', 3, 'b']), saya mendapatkannya dengan kutipan, tetapi saya tidak ingin kutipan.
Jawaban:
Dengan Python 2:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
Di Python 3 (di mana printada fungsi bawaan dan bukan fitur sintaks lagi):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
Keduanya kembali:
[x, 3, b]
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]".
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]".
"[{0}]".format(", ".join(str(i) for i in mylist))
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 itu map(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.
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
Ini mencetak semuanya tanpa tanda kutip, seperti yang Anda inginkan.
Jika Anda menggunakan Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
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 ,,.
", ".join( str(x) for x in list_or_iterator).join('[]')
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.
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
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:
import string
print string.translate(str(lst), None, "'")
Menggunakan string.translate()fungsi ini juga akan berfungsi di 2.6+, jadi menggunakannya mungkin lebih disukai.
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 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'
Menggunakan .formatuntuk pemformatan string,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
Keluaran:
[x, 3, b]
Penjelasan:
mapdigunakan untuk memetakan setiap elemen dari daftar yang akan stringdiketik.,sebagai pemisah.[dan ]dalam pernyataan cetak untuk menunjukkan kurung kurawal daftar.Referensi:
.formatuntuk pemformatan string PEP-3101
.formatcara yang paling pythonic. Tapi, tentu saja, saya menerima ketidaksetujuan. ;)
Saya terinspirasi oleh @AniMenon untuk menulis solusi pythonic yang lebih umum.
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
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
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
Outputnya cukup baik:
[1.85, -6.33, 4000.21]
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 antarastrdanrepratau Pythonstrdanlists untuk info lebih lanjut.