.Join () yöntemi tam olarak ne yapar?


209

Python için oldukça yeniyim ve tamamen karıştırdım, .join()dizeleri birleştirmek için tercih edilen yöntem okudum.

Denedim:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

ve şöyle bir şey var:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

Neden böyle çalışıyor? Olmamalı 595sadece otomatik eklenecek?


1
Program çalışırken Yubikey'nize dokunduğunuzu düşünüyorum
Trenton

Yanıtlar:


303

Çıktınıza dikkatlice bakın:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Orijinal dizenizin "5", "9", "5" değerlerini vurguladım. Python join()yöntemi bir dize yöntemidir ve dizeyle birleştirilecek şeylerin bir listesini alır . Daha basit bir örnek açıklamaya yardımcı olabilir:

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

"," Verilen listenin her bir öğesi arasına eklenir. Sizin durumunuzda, "listeniz", "595" dize temsilidir ve "[5", "9", "5"] olarak kabul edilir.

Bunun +yerine aradığınız görülüyor :

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

1
Neden olmasın: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? Dize son öğeye eklenmiş mi?
Matt McCormick

10
Bunun bir nedeni bu verir ise jointersi olma kullanışlı özelliği split( docs.python.org/library/stdtypes.html#str.split )
cobbal

4
Başka bir sınırlayıcı istiyorsanız, listenizin sonuna boş bir dize koyun. ','.join(['a', 'b', 'c', ''])"a, b, c," verir
tgray

9
OP muhtemelen kafa karıştırıcı string.joinile os.path.joingerçekten yolları birleştirir hangi
Juan Campa

91

jointartışma olarak yinelenebilir bir şey alır. Genellikle bu bir listedir. Sizin durumunuzdaki sorun, bir dizenin kendisinin tekrarlanabilir olması ve her karakteri sırayla vermesidir. Kodunuz şu şekildedir:

"wlfgALGbXOahekxSs".join("595")

ki bununla aynı şekilde hareket eder:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

ve böylece dizenizi üretir:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

Yinelenebilir olarak dizeler, Python ile ilgili en kafa karıştırıcı başlangıç ​​sorunlarından biridir.


8
karışıklığın en önemli noktasını işaret etmek için oy verin: dizeler tekrarlanabilir, böylece karakter listeleri gibi davranırlar.
Daniel Baird

59

Bir dize eklemek için onu +işaretle birleştirin .

Örneğin

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

joindizeleri bir ayırıcıyla birbirine bağlar. Ayırıcı, hemen önüne yerleştirdiğiniz şeydir join. Örneğin

>>> "-".join([a,b])
'Hello, -world'

Join, bir dizge listesini parametre olarak alır.


5
Bu tür doğrudan ve özlü cevap topluluğumuz tarafından savunulmalıdır. @Dan
DehengYe

7

join (), tüm liste öğelerini birleştirmek içindir. Yalnızca iki dizeyi birleştirmek için "+" daha anlamlı olur:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid

4

Diğerlerinin söylediklerini biraz daha genişletmek için, birleştirmeyi iki dizenizi birleştirmek için kullanmak istiyorsanız, bunu yaparsınız:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

Burada +çok sayıda dizeyi birleştirmek için kullanmanın neden pahalı olduğuna dair iyi bir açıklama var.

Ayrıca operatör, iki Python dizesini birleştirmek için mükemmel bir çözümdür . Ancak ikiden fazla dizeyi (n> 25) eklemeye devam ederseniz, başka bir şey düşünmek isteyebilirsiniz.

''.join([a, b, c]) hile bir performans optimizasyonudur.


0

Bunu girdi olarak sağlayarak,

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

Python bunu çıktı olarak döndürür:

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

Bu bir girdi ise, JOIN yöntemini kullanarak, kelimeler arasındaki mesafeyi ekleyebilir ve listeyi dizeye dönüştürebiliriz.

Bu Python çıktısı

'my name is kourosh'

0

"" .join , listedeki dizeyi bir değişkene kopyalamak için kullanılabilir

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
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.