Bu yüzden bir listem var:
['x', 3, 'b']
Ve çıktının şöyle olmasını istiyorum:
[x, 3, b]
Bunu python'da nasıl yapabilirim?
Eğer yaparsam str(['x', 3, 'b']), alıntılı bir tane alırım, ama alıntı istemiyorum.
Yanıtlar:
Python 2'de:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
Python 3'te ( printartık bir sözdizimi özelliği değil yerleşik bir işlevdir):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
Her ikisi de dönüş:
[x, 3, b]
Bu, map()işlevin her bir mylist öğesi için str'yi çağırmak ve daha sonra tek bir dizede birleştirilen yeni bir dizge listesi oluşturmaktır str.join(). Ardından, %operatöre biçimlendirme dize içinde yerine dizesinin %siçinde "[%s]".
mapİşlevi, ströğesinin her bir öğesini çağırmak için kullanıyor ve mylistdaha sonra tek bir dizede birleştireceği yeni bir dizge listesi oluşturuyor str.join. Sonra, o kullanır %içinde yerine dize yerine operatörün biçimlendirme dize %siçinde "[%s]".
"[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)(veya imappython2.x'te) tercih etme eğilimindeyim ; daha az bayt kodu çalıştırma eğilimindedir ve genellikle daha kompakttır. Kesinlikle do not çok daha kötü şu(f(x) for x in xs)f map(lambda x:..., xs)(... for x in xs)
Bu basit bir koddur, bu nedenle yeniyseniz, yeterince kolay anlamalısınız.
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
İstediğiniz gibi hepsini tırnak işaretleri olmadan yazdırır.
Python3 kullanıyorsanız:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
Kullanmak yerine, yineleyiciyi kabul mapetme özelliğine sahip bir oluşturucu ifadesi kullanmanızı öneririm join:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
Burada joinstring sınıfının bir üye fonksiyonudur str. Bir argüman alır: bir dizge listesi (veya yineleyici), daha sonra bu durumda, tarafından birleştirilmiş tüm öğelerin bulunduğu yeni bir dize döndürür ,.
", ".join( str(x) for x in list_or_iterator).join('[]')
Bir dizedeki tüm istenmeyen karakterleri , argüman için olan translate()yöntemini ve ardından argümanı için kaldırılmasını istediğiniz karakter (ler) i içeren bir dizeyi kullanarak silebilirsiniz .Nonetabledeletechars
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
Eğer 2,6 önce Python bir sürümünü kullanıyorsanız, kullanmak gerekir stringmodülün translate()yeteneği geçmesine çünkü yerine işlevi Noneolarak tableargüman Python 2.6 kadar eklenmedi. Bunu kullanmak şuna benzer:
import string
print string.translate(str(lst), None, "'")
Bu string.translate()işlevi kullanmak 2.6+ sürümünde de çalışacaktır, bu nedenle işlevin kullanılması tercih edilebilir.
lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]ve ayrıcalst = ['it isn\'t', 3, 'b']
İşte @ TokenMacGuy'un tek satırlık programındaki bazı adımları gösteren etkileşimli bir oturum. İlk olarak map, listedeki her bir öğeyi bir dizgeye dönüştürmek için işlevi kullanır (aslında, eski listedeki öğeleri dönüştürmez, yeni bir liste oluşturur). Sonra joinbu dizeleri ', 'aralarında birleştirmek için string yöntemini kullanıyor . Gerisi, oldukça basit olan dize biçimlendirmesidir. (Düzenleme: bu örnek basittir; genel olarak dize biçimlendirme biraz karmaşık olabilir.)
Kullanmanın join, birkaç alt dizeden bir dize oluşturmanın basit ve etkili bir yolu olduğunu, dizelere arka arkaya dizeler ekleyerek yapmaktan çok daha verimli olduğunu unutmayın; bu, arka planda çok sayıda kopyalama gerektirir.
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
.formatDize biçimlendirmesi için kullanmak ,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
Çıktı:
[x, 3, b]
Açıklama:
mapyazılacak listenin her bir öğesini eşlemek için kullanılır string.,ayırıcı olarak bir dizede birleştirilir .[ve kullanırız ].Referans:
.formatPEP-3101 dizgi formatlaması için
.formatEn pitonik yolu kullanarak buluyorum . Ama tabii ki anlaşmazlıkları da kabul ediyorum. ;)
@AniMenon'dan daha genel bir pitonik çözüm yazmak için ilham aldım.
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
Sadece formatyöntemi kullanır . İz strbırakmaz ve öğelerin formatının ince ayarına izin verir. Örneğin, listenin öğeleri olarak kayan sayılarınız varsa, bu durumda bir dönüştürme belirticisi ekleyerek biçimlerini ayarlayabilirsiniz.:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
Çıktı oldukça iyi:
[1.85, -6.33, 4000.21]
print(["Sam"])aradığınızdarepr("Sam")ve geri dönen python çağrılarının (tırnak işaretleri olmadan'Sam') aksine, dönenprint("Sam")çağrılar (tırnak işaretleri ile). Daha fazla bilgi için ve veya Python ve s arasındaki farkı görün .str("Sam")Samstrreprstrlist