Nasıl dizeleri listesinden virgülle ayrılmış dize yapacak?

oy
313

Her iki ardışık çifti arasında bir virgül eklenir, öyle ki bir dizisinden dizeleri bitiştirmek için tercih yolu ne olmalıdır. Yani, örneğin, harita, nasıl olduğunu [ 'a', 'b', 'c' ]hiç 'a,b,c'? (Olgu [ s ]ve []eşlenmesi sve ''sırasıyla).

Genellikle böyle bir şey kullanarak sonuna ''.join(map(lambda x: x+',',l))[:-1]değil, aynı zamanda biraz tatminsiz duygu.

Düzenleme: Ben çözüm çok basit olduğundan utanıyor ve mutlu hem değilim. Açıkçası ben ne yapıyorum konusunda pek bir ipucu var. (Muhtemelen basit birleştirme geçmişte ve bir şekilde ezberlemiş gerekli s.join([e1,e2,...])için bir kısaltma olarak s+e1+e2+....)

Oluştur 04/09/2008 saat 22:04
kaynak kullanıcı
Diğer dillerde...                            


15 cevaplar

oy
593

myList = ['a','b','c','d']
myString = ",".join(myList )

Liste numaralarını içeriyorsa, bu işe yaramaz.


As Ricardo Reyes önerdi o (örneğin tamsayılar, yüzen, bool değerlerden oluşan, Yok gibi) olmayan dize türleri içeriyorsa, o zaman yapın:

myList = ','.join(map(str, myList)) 
Cevap 04/09/2008 saat 22:06
kaynak kullanıcı

oy
58

Neden harita / lambda büyü? Bu çalışmıyor mu?

>>>foo = [ 'a', 'b', 'c' ]
>>>print ",".join(foo)
a,b,c
>>>print ",".join([])

>>>print ",".join(['a'])
a

Düzenleme: numaraları için durum dışında mark-Biek noktaları @. Belki liste anlama:

>>>','.join([str(x) for x in foo])

daha "pythonic" dir.

Edit2: Öneriler için teşekkürler. Ben jeneratör yerine gelecekte liste anlama kullanacağız.

>>>','.join(str(x) for x in foo)
Cevap 04/09/2008 saat 22:08
kaynak kullanıcı

oy
11

Sadece istemiyorum:

",".join(l)

Eğer / alıntı değerlerinde vb virgül kaçmak gerekirse Açıkçası daha karmaşık oluyor. Bu durumda ben standart kütüphanede csv modülü bakarak önermek istiyorum:

https://docs.python.org/library/csv.html

Cevap 04/09/2008 saat 22:09
kaynak kullanıcı

oy
1

Ben bir şey eksik sürece, ','.join(foo)sizin için soruyorsun yapmalı.

>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'

(Düzenleme: ve jmanning2k işaret ettiği gibi,

','.join([str(x) for x in foo])

Sonuç dizesi elemanları virgül içerebilir eğer ayrıştırmak için zor olacak olsa da, daha güvenli ve oldukça Pythonictir - yani bir anda şunları tüm özelliklerine ihtiyaç csv. Douglas onun cevabını işaret ettiği gibi, modül)

Cevap 04/09/2008 saat 22:10
kaynak kullanıcı

oy
4

@ Listesi kavrayışa jmanning2k yeni bir geçici listesi oluşturma dezavantajı vardır. daha iyi bir çözüm bir yineleyici döndürür itertools.imap kullanarak olurdu

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
Cevap 04/09/2008 saat 22:57
kaynak kullanıcı

oy
9

@Peter Hoffmann

jeneratör ifadeleri kullanmak da bir yineleyici üretme yararı vardır ancak ithal itertools kaydeder. Ayrıca, liste comprehensions genellikle, harita böylece, ben jeneratör ifadeler imap tercih edilecek beklediğiniz tercih edilir.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar' 
Cevap 05/09/2008 saat 17:29
kaynak kullanıcı

oy
3
l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"
Cevap 15/09/2008 saat 19:08
kaynak kullanıcı

oy
10

İşte dışı dize liste öğeleri verir Python 3.0 bir alternatif çözümdür:

>>> alist = ['a', 1, (2, 'b')]
  • Standart bir yolu

    >>> ", ".join(map(str, alist))
    "a, 1, (2, 'b')"
    
  • alternatif bir çözüm

    >>> import io
    >>> s = io.StringIO()
    >>> print(*alist, file=s, sep=', ', end='')
    >>> s.getvalue()
    "a, 1, (2, 'b')"
    

NOT: virgülden sonra boşluk maksatlıdır.

Cevap 01/10/2008 saat 10:23
kaynak kullanıcı

oy
3

Sayı içeren listeyi dönüştürmek için aşağıdakileri yapın:

string  =  ''.join([str(i) for i in list])
Cevap 06/09/2012 saat 11:08
kaynak kullanıcı

oy
9

",".join(l)Tüm durumlar için çalışmaz. Ben StringIO ile csv modülü kullanarak öneririm

import StringIO
import csv

l = ['list','of','["""crazy"quotes"and\'',123,'other things']

line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'
Cevap 10/02/2016 saat 15:43
kaynak kullanıcı

oy
0

İşte liste ile bir örnek

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

Daha kesin:-

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

Örnek 2: -

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange
Cevap 15/05/2017 saat 11:25
kaynak kullanıcı

oy
4
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'

my_listdeğişkenlerin her tür içerebilir. Bu durumun önlenmesi 'A,,,D,E'.

Cevap 20/05/2017 saat 11:31
kaynak kullanıcı

oy
-2

Benim iki Sentim. Python basit bir tek satırlık kodu gibi:

>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'

Bu, pythonic var dizeleri, sayılar, Yok ve boş dize için çalışır. Bu kısa ve gereksinimlerini karşılar. Liste numaralarını ihtiva etmeyecek, biz bu basit varyasyonu kullanabilirsiniz:

>>> ','.join(ifilter(lambda x: x, l))

@Peter Hoffmann (teşekkürler) işaret gibi Ayrıca bu çözüm, yeni bir liste oluşturmak, ancak bir yineleyici kullanır.

Cevap 07/01/2018 saat 13:56
kaynak kullanıcı

oy
-1

Böyle küçük bir şey :)

String = "Once:Upon:a:Time:A:Long:Time:Ago"
ding = String.split(':')

ring = (" , ").join(ding)

print(ring)

Çıktı: Bir kere, bir, Zaman, A, üzerine, Uzun, Zaman, önce

Cevap 24/04/2018 saat 08:17
kaynak kullanıcı

oy
0

Söyleyebilirim csvhepsi csv kullanım durumları ile başa çıkmak için inşa edilmiş olarak kütüphane vb bir dizede virgül gibi, burada tek mantıklı seçenek

Çıkış listesi için lbir .csv dosyasına:

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(l)  # this will output l as a single row.  

Kullanımı da mümkündür writer.writerows(iterable)csv çıkış birden satırlara.

Bu örnek kullanılan burada diğer cevap olarak, Python 3 ile uyumludur StringIOPython 2'dir.

Cevap 18/06/2018 saat 15:08
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more