Python'da dize olarak farklı türde öğelerin listesine katılın


292

Bir öğe listesine katılmam gerekiyor. Listedeki öğelerin çoğu, bir işlevden döndürülen tamsayı değerleridir; yani

myList.append(munfunc()) 

Listeye katılmak için döndürülen sonucu bir dizeye nasıl dönüştürmeliyim?

Her tamsayı değeri için aşağıdakileri yapmam gerekir mi:

myList.append(str(myfunc()))

Döküm problemlerini çözmenin daha Pitonik bir yolu var mı?


3
Lütfen, insanların ne istediğini anlayabilmeleri ve / veya göndermeden önce sorunuzu tekrar okuyabilmeleri için iyi bir dilbilgisi kullandığınızdan emin olun.
allyourcode

Yanıtlar:


538

Arama str(...), bir şeyi bir dizgeye dönüştürmenin Pitonik yoludur.

Neden bir dize listesi istediğinizi düşünmek isteyebilirsiniz. Bunun yerine tamsayıların bir listesi olarak saklayabilir ve yalnızca tamsayıları görüntülemeniz gerektiğinde dizelere dönüştürebilirsiniz. Örneğin, bir tamsayı listeniz varsa, bunları bir for-loop'ta tek tek dönüştürebilir ve bunlara katılabilirsiniz ,:

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

175

Tamsayı str'ye geçirmede yanlış bir şey yok. Bunu yapmamanızın bir nedeni, myList'in tamsayıların bir listesi olması gerektiğidir, örneğin listedeki değerleri toplamak makul olacaktır. Bu durumda, myList'e eklemeden önce ints'lerinizi iletmeyin. Eklemeden önce dizelere dönüştürmüyorsanız, aşağıdaki gibi bir şey yaparak büyük bir dize oluşturabilirsiniz

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

36
Muhtemelen İngilizce ana dili değildir. Birçoğu dönüştürdüğü öğelerin bir listesine katılma isteğinden emin değil misiniz str? Lütfen ayrıştırıcınıza bulanık mantık eklemeniz gerektiğini düşünün ;-)
John Machin

3
@John Bunu düşündüm, ama İngilizce'de iyiyse, onu SO'daki İngilizce seviyesini normal seviyesine getirmek için hafifçe itmek istedim. Bence cevabım onun içinde olabileceği çeşitli yorumları ve durumları eğlendiriyor.
allyourcode

41

Python'da harita fonksiyonu kullanılabilir. İki argüman alır. İlk argüman, listenin her öğesi için kullanılması gereken işlevdir . İkinci argüman yinelenebilir .

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

Listeyi dizeye dönüştürdükten sonra, listeyi tek bir dizede birleştirmek için basit birleştirme işlevini kullanabilirsiniz

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

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

Yukarıdaki yöntem, listeyi dizeye dönüştürmenin en kolay ve en genel yoludur. başka bir kısa yöntem

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

4

Bunu yapmanın üç yolu vardır.

diyelim ki bir listeniz var

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))

Ancak https://docs.python.org/2/library/timeit.html adresindeki python web sitesinde bulunan timeit örneğinde belirtildiği gibi bir harita kullanmak daha hızlıdır. Bu yüzden kullanmanızı tavsiye ederim"-".join(map(str, my_list))


2

Sorununuz oldukça açık. Belki de başka bir listenin tüm öğelerini mevcut bir listeye eklemek için genişletme arıyorsunuz:

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

Tamsayıları dizelere dönüştürmek istiyorsanız, str () veya string enterpolasyonunu kullanın;

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

Tüm bunlar pitonik olarak kabul edilir (tamam, bir jeneratör ifadesi daha da pitoniktir, ancak basit ve konu üzerinde kalalım)


2

Örneğin:

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']

Bana gelince, strher str listesinden önce bir eklemek istiyorum :

# 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']

Veya tek liste:

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

Belki dize olarak sayılara ihtiyacınız yoktur, yapmanız gerekenler:

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

Daha sonra dize olarak ihtiyacınız varsa dize veya biçim dizesi ile yapabilirsiniz:

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


-1

Kimse nasıl hoşlanmıyor gibi görünüyor repr?
python 3.7.2:

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

Yine de dikkatli olun, bu açık bir temsildir. Bir örnek şunları gösterir:

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

pydocs-repr şirketinde daha fazla bilgi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.