Защо се използва string.join(list) вместо list.join(string)?

Това винаги ме е обърквало. Струва ми се, че това би било по-хубаво:

my_list = ["Hello", "world"]
print(my_list.join("-"))
# Produce: "Hello-world"

отколкото това:

my_list = ["Hello", "world"]
print("-".join(my_list))
# Produce: "Hello-world"

Има ли конкретна причина да е така?

Решение

Това е така, защото всяка итерабилна таблица може да бъде обединена, не само списъци, но резултатът и "обединителят" винаги са низове.

Например:

import urllib2
print('\n############\n'.join(
    urllib2.urlopen('http://data.stackexchange.com/users/7095')))
Коментари (11)

Защото методът join() е в класа string, вместо в класа list?

Съгласен съм, че изглежда смешно.

Вижте http://www.faqs.org/docs/diveintopython/odbchelper_join.html:

Историческа бележка. Когато за първи път научих Python, очаквах join да бъде метод на списък, който ще вземе символа разделител като аргумент. Много от хора смятат по същия начин и има история зад метода join. Преди до Python 1.6 низовете нямаха всички тези полезни методи. Имаше един отделен модул за стрингове, който съдържаше всички функции за символни низове; всяка функция приемаше низ като първи аргумент. Функциите се считат за достатъчно важни, за да се поставят в самите низове, което е логично за функции като lower, upper и разделяне. Но много от най-запалените потребители на Python програмисти се противопоставиха на новото присъединяване метод, като твърдяха, че той трябва да бъде метод на списъка вместо това, или че той изобщо не трябва да се премества, а просто да остане част от стария модул string (който все още има много полезни неща в него). Аз използвам изключително новия метод join, но ще видите код, написан или по този начин, а ако наистина ви притеснява, можете можете да използвате старата функция string.join вместо това.

--- Марк Пилгрим, "Гмуркане в Python

Коментари (1)

Преди всичко защото резултатът от someString.join() е низ.

Последователността (списък, кортеж или каквото и да е друго) не се появява в резултата, а само като низ. Тъй като резултатът е низ, има смисъл да се използва като метод на низ.

Коментари (0)