Listedeki öğeyi dizelerle bitiştir


574

Bir listedeki dize öğelerini tek bir dize halinde birleştirmenin daha basit bir yolu var mı? Bu str.join()işlevi kullanabilir miyim ?

Örneğin, bu girdi ['this','is','a','sentence']ve bu istenen çıktıdırthis-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str

24
'-'.join(sentence)
aland

Yanıtlar:


1052

Kullanım join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
Anlamadım, soldaki '-' ne olması gerekiyordu ??
Lawrence DeSouza

5
@LawrenceDeSouza Katılmak istediğiniz dize; belgelere ya da biraz daha ayrıntılı olan bu cevaba bakınız .
Burhan Khalid

9
sentence.join(" ")Ters işlem olduğu için de çalışmam bekleniyordu list.split(" "). Bunun Python'un liste yöntemlerine eklenip eklenmeyeceği hakkında bir fikriniz var mı?
Wouter Thielen

10
@Wouter, olmayacak. Bir yandan, yalnızca dizelerin listeleri birleştirilebilir; bu nedenle list.joinrastgele bir liste için uygun olmaz. Öte yandan, argümanı str.joinsadece bir liste değil, herhangi bir "yinelenebilir" dizge dizisi olabilir. Mantıklı olabilecek tek şey yerleşik bir işlevdir join(list, sep); stringEğer gerçekten isterseniz (temelde eski) modülde bir tane var.
alexis

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

Python listelerini dizelere dönüştürmenin daha genel bir yolu:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'

3
giriş dize olduğunda liste kavraması neden gereklidir? ayrıca map(str, my_lst)listeyi numaralandırmadan yeterli olacaktır =)
alvas

5
Bu sorunun cevabının çoğu, listenin içinde dizeler olduğu durumu düşünüyor. Mine, listeleri dizelere dönüştürmenin genel bir yoludur. Örneğimde, liste türdedir, intancak dize olarak temsil edilebilecek herhangi bir tür olabilir.
6pack çocuk

3
Buna eklemek için, harita lambda fonksiyonu ile kullanıldığında da yararlı olacaktır. Örnek için ' '.join(map(lambda x: ' $'+ str(x), my_lst))dönecekti'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
harita eklemek dize dışında veri türlerine yardımcı olur. Harika!
appleboy

40

Yeni başlayanlar için birleştirme neden bir dize yöntemi olduğunu bilmek çok yararlıdır .

Başlangıçta çok garip ama bundan sonra çok faydalı.

Birleştirme sonucu her zaman bir dizedir, ancak birleştirilecek nesne birçok türde olabilir (jeneratörler, liste, tuples, vb.).

.joindaha hızlıdır çünkü belleği yalnızca bir kez ayırır. Klasik birleştirme işleminden daha iyi (bkz . Genişletilmiş açıklama ).

Bir kez öğrendikten sonra, çok rahat ve parantez eklemek için böyle hileler yapabilirsiniz.

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

Her ne kadar @Burhan Khalid'in cevabı iyidir, bunun böyle daha anlaşılır olduğunu düşünüyorum:

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

Join () işlevinin ikinci bağımsız değişkeni isteğe bağlıdır ve varsayılan olarak "" şeklindedir.

EDIT: Bu işlev Python 3'te kaldırıldı


14
Bu işlev 2.x'te kaldırılmıştır ve 3.x'te kaldırılacaktır. Bu durumda, sağlanan diğer cevap üzerinde bunu tavsiye etmem.
Matthew Green

@Mathew Green bu cevabı ve Burhan Khalid'in cevabı aynı işlevi farklı şekillerde kullanıyor, bu yüzden cevabı da reddediliyor. Ama bunu işaret ettiğiniz için teşekkürler, go 3.x'e nasıl katılacağınızı anlayın. Ama 2.x kullanıyorsanız, gitmiyor.
SilentVoid

1
Yine de itiraz edilmiyor. Tavsiyeniz Lib / string.py'den tamamen farklı ve kullanımdan kaldırılmış bir işlev kullanıyor, @BurhanKhalid yanıtı ise kullanımdan kaldırılmamış yerleşik dize yöntemini kullanıyor. Onun cevabı şu an için en doğru ve ileriye dönükken, bu sadece şimdilik 2.x için iyi.
Matthew Green

Tüm bunları söylemek için, bu alternatifi tanıtmak istiyorsanız, önceki yorumlarımda belirtilen nedenlerle bunun tavsiye edilmediğini de belirtmeniz gerekir.
Matthew Green

2

Dizeye nasıl katılmamız gerektiğini belirtebiliriz. '-' yerine 'kullanabiliriz'

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

2

Python'un azaltma işlevini de kullanabiliriz :

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
Çok fazla gereksiz karmaşıklık, neden sadece kullanmıyorsunuz join?
Sebastian Palma

-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
Bu kod snippet'i çözüm olsa da, bir açıklama da dahil olmak üzere mesajınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
alan.elkin
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.