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