Что именно делает метод .join ()?

209

Я довольно новичок в Python и полностью сбит с толку тем, .join()что прочитал, что это предпочтительный метод для объединения строк.

Я попытался:

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

и получил что-то вроде:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

Почему это работает так? Разве 595просто не должно быть автоматически добавлено?

Мэтт Маккормик
источник
1
Я думаю, что вы
Трентон

Ответы:

303

Посмотрите внимательно на ваш вывод:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Я выделил «5», «9», «5» вашей исходной строки. Метод Python join()является строковым методом и принимает список вещей, которые нужно объединить со строкой. Более простой пример может помочь объяснить:

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

"," Вставляется между каждым элементом данного списка. В вашем случае ваш «список» - это строковое представление «595», которое рассматривается как список [«5», «9», «5»].

Похоже, что вы ищете +вместо этого:

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
Грег Хьюгилл
источник
1
Почему это не так: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? Со строкой, добавленной к последнему элементу?
Мэтт Маккормик
10
Одна из причин заключается в том, что это дает joinполезное свойство быть обратным split( docs.python.org/library/stdtypes.html#str.split )
коббал
4
Если вам нужен другой разделитель, поместите пустую строку в конец списка. ','.join(['a', 'b', 'c', ''])дает "a, b, c"
tgray
9
ОП, вероятно, путал string.joinс тем, os.path.joinчто действительно объединяет пути
Хуан Кампа
91

joinпринимает итеративную вещь в качестве аргумента. Обычно это список. Проблема в вашем случае состоит в том, что строка сама по себе является итеративной, выдавая каждый символ по очереди. Ваш код сводится к следующему:

"wlfgALGbXOahekxSs".join("595")

который действует так же, как это:

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

и так выдает вашу строку:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

Строки как итерируемые - одна из самых запутанных проблем в начале работы с Python.

Нед Бэтчелдер
источник
8
Признание за то, что указывает на то, что может быть сутью путаницы: строки повторяются, поэтому они действуют как списки символов.
Даниэль Бэрд
59

Чтобы добавить строку, просто объедините ее со +знаком.

Например

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

joinсоединяет строки вместе с разделителем. Разделитель - это то, что вы размещаете прямо перед join. Например

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

Join принимает в качестве параметра список строк.

Дэн Левенхерц
источник
5
Этот вид прямого и краткого ответа должен поддерживаться нашим сообществом. @Dan
DehengYe
7

join () предназначен для объединения всех элементов списка. Для объединения только двух строк "+" имело бы больше смысла:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid
Петерис Кауне
источник
4

Чтобы еще больше рассказать о том, что говорят другие, если вы хотите использовать объединение, чтобы просто объединить две строки, вы должны сделать это:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])
Jorenko
источник
2

Существует хорошее объяснение того , почему это дорого использовать +для конкатенации большого количества строк здесь

Оператор Plus является прекрасным решением для объединения двух строк Python. Но если вы продолжите добавлять более двух строк (n> 25), вы можете подумать о другом.

''.join([a, b, c]) Хитрость - это оптимизация производительности.

Закс
источник
0

Предоставляя это в качестве входных данных,

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

Python возвращает это как вывод:

'server=mpilgrim;uid=sa;database=master;pwd=secret'
Акаш Кандпал
источник
0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

Если это вход, используя метод JOIN, мы можем добавить расстояние между словами, а также преобразовать список в строку.

Это выход Python

'my name is kourosh'
Kourosh
источник
0

"" .join может быть использован для копирования строки в списке в переменную

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
Мартин
источник