Почему надо писать string.join(list), а не list.join(string)?

Меня это всегда смущало. Мне кажется что это:

my_list = ["Hello", "world"]
print(my_list.join("-"))
# результат: "Hello-world"

было бы понятнее, чем это:

my_list = ["Hello", "world"]
print("-".join(my_list))
# результат: "Hello-world"

Есть ли конкретная причина, по которой надо писать именно так?

Свободный перевод вопроса Why is it string.join(list) instead of list.join(string)? от участника Evan Fosmark


Ответы (1 шт):

Автор решения: Danis

Это потому, что любой итерируемый объект может быть объединен (например: список, кортеж, словарь, множество), но его содержимое и «объединитель» должны быть строками.

Например:

'_'.join(['welcome', 'to', 'stack', 'overflow'])
'_'.join(('welcome', 'to', 'stack', 'overflow'))
'welcome_to_stack_overflow'

Использование чего-то другого, кроме строк, вызовет следующую ошибку:

TypeError: sequence item 0: expected str instance, int found

Свободный перевод ответа от участника recursive

→ Ссылка