Bergabung dengan daftar item dengan tipe berbeda sebagai string dengan Python


292

Saya harus bergabung dengan daftar item. Banyak item dalam daftar adalah nilai integer yang dikembalikan dari suatu fungsi; yaitu,

myList.append(munfunc()) 

Bagaimana cara saya mengkonversi hasil yang dikembalikan ke string untuk bergabung dengan daftar?

Apakah saya perlu melakukan hal berikut untuk setiap nilai integer:

myList.append(str(myfunc()))

Apakah ada cara yang lebih Pythonic untuk menyelesaikan masalah casting?


3
Harap pastikan Anda menggunakan tata bahasa yang baik sehingga orang-orang dapat memahami apa yang Anda minta dan / atau membaca kembali pertanyaan Anda sebelum memposting.
allyourcode

Jawaban:


537

Memanggil str(...)adalah cara Pythonic untuk mengubah sesuatu menjadi string.

Anda mungkin ingin mempertimbangkan mengapa Anda menginginkan daftar string. Sebagai gantinya, Anda dapat menyimpannya sebagai daftar bilangan bulat dan hanya mengonversi bilangan bulat menjadi string saat Anda perlu menampilkannya. Misalnya, jika Anda memiliki daftar bilangan bulat maka Anda dapat mengonversinya satu per satu di for-loop dan bergabung dengan ,:

print(','.join(str(x) for x in list_of_ints))

175

Tidak ada yang salah dengan melewatkan bilangan bulat ke str. Salah satu alasan Anda mungkin tidak melakukan ini adalah bahwa myList benar-benar seharusnya menjadi daftar bilangan bulat misalnya akan masuk akal untuk menjumlahkan nilai-nilai dalam daftar. Jika demikian, jangan berikan int Anda ke str sebelum menambahkannya ke myList. Jika Anda akhirnya tidak mengonversi ke string sebelum menambahkan, Anda dapat membuat satu string besar dengan melakukan sesuatu seperti

', '.join(map(str, myList))

36
Agaknya bahasa Inggris bukan bahasa ibu. Anda tidak yakin tentang keinginannya untuk bergabung dengan daftar item yang banyak dia konversi str? Silakan pertimbangkan kemungkinan bahwa Anda perlu menambahkan beberapa logika fuzzy ke parser Anda ;-)
John Machin

3
@ John Saya menganggap itu, tetapi jika dia pandai berbahasa Inggris, saya ingin mendorongnya dengan lembut untuk membawa tingkat bahasa Inggris pada SO ke tingkat normal. Saya pikir jawaban saya memang menghibur berbagai interpretasi dan situasi yang mungkin dia hadapi.
allyourcode

41

Fungsi peta dalam python dapat digunakan. Dibutuhkan dua argumen. Argumen pertama adalah fungsi yang harus digunakan untuk setiap elemen daftar. Argumen kedua adalah iterable .

a = [1, 2, 3]   
map(str, a)  
['1', '2', '3']

Setelah mengonversi daftar menjadi string, Anda dapat menggunakan fungsi gabung sederhana untuk menggabungkan daftar menjadi satu string

a = map(str, a)    
''.join(a)      
'123'

10
a=[1,2,3]
b=[str(x) for x in a]
print b

metode di atas adalah cara termudah dan paling umum untuk mengubah daftar menjadi string. metode pendek lain adalah-

a=[1,2,3]
b=map(str,a)
print b

4

Ada tiga cara untuk melakukan ini.

katakanlah Anda punya daftar int

my_list = [100,200,300]
  1. "-".join(str(n) for n in my_list)
  2. "-".join([str(n) for n in my_list])
  3. "-".join(map(str, my_list))

Namun seperti yang dinyatakan dalam contoh timeit di situs web python di https://docs.python.org/2/library/timeit.html menggunakan peta lebih cepat. Jadi saya sarankan Anda menggunakan"-".join(map(str, my_list))


2

Masalah Anda agak jelas. Mungkin Anda mencari perluasan, untuk menambahkan semua elemen daftar lain ke daftar yang ada:

>>> x = [1,2]
>>> x.extend([3,4,5])
>>> x
[1, 2, 3, 4, 5]

Jika Anda ingin mengonversi bilangan bulat menjadi string, gunakan str () atau interpolasi string, mungkin dikombinasikan dengan pemahaman daftar, yaitu

>>> x = ['1', '2']
>>> x.extend([str(i) for i in range(3, 6)])
>>> x
['1', '2', '3', '4', '5']

Semua ini dianggap pythonic (ok, ekspresi generator bahkan lebih pythonic tapi mari kita tetap sederhana dan pada topik)


2

Sebagai contoh:

lst_points = [[313, 262, 470, 482], [551, 254, 697, 449]]

lst_s_points = [" ".join(map(str, lst)) for lst in lst_points]
print lst_s_points
# ['313 262 470 482', '551 254 697 449']

Mengenai saya, saya ingin menambahkan strsebelum daftar str:

# here o means class, other four points means coordinate
print ['0 ' + " ".join(map(str, lst)) for lst in lst_points]
# ['0 313 262 470 482', '0 551 254 697 449']

Atau daftar tunggal:

lst = [313, 262, 470, 482]
lst_str = [str(i) for i in lst]
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

lst_str = map(str, lst)
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

1

Mungkin Anda tidak perlu angka sebagai string, cukup lakukan:

functaulu = [munfunc(arg) for arg in range(loppu)]

Nanti jika Anda membutuhkannya sebagai string, Anda bisa melakukannya dengan string atau dengan format string:

print "Vastaus5 = %s" % functaulu[5]


-1

Kenapa tidak ada yang suka repr?
python 3.7.2:

>>> int_list = [1, 2, 3, 4, 5]
>>> print(repr(int_list))
[1, 2, 3, 4, 5]
>>> 

Berhati-hatilah, itu adalah representasi eksplisit. Contoh menunjukkan:

#Print repr(object) backwards
>>> print(repr(int_list)[::-1])
]5 ,4 ,3 ,2 ,1[
>>> 

info lebih lanjut di pydocs-repr

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.