Esto siempre me ha confundido. Parece que esto sería más bonito:
my_list = ["Hello", "world"]
print(my_list.join("-"))
# Produce: "Hello-world"
Que esto:
my_list = ["Hello", "world"]
print("-".join(my_list))
# Produce: "Hello-world"
¿Hay alguna razón específica por la que sea así?
Es porque cualquier iterable puede ser unido, no sólo las listas, pero el resultado y el "joiner" son siempre cadenas.
Por ejemplo:
import urllib2
print('\n############\n'.join(
urllib2.urlopen('http://data.stackexchange.com/users/7095')))
¿Porque el método join()
está en la clase string, en lugar de la clase list?
Estoy de acuerdo en que se ve raro.
Ver http://www.faqs.org/docs/diveintopython/odbchelper_join.html:
Nota histórica. Cuando aprendí por primera vez Python, esperaba que join fuera un método de una lista, que tomaría el delimitador como argumento. Mucha gente piensa lo mismo, y hay una historia detrás del método join. Antes de Antes de Python 1.6, las cadenas no tenían todos estos métodos útiles. Había un módulo módulo de cadenas separado que contenía todas las funciones de cadenas; cada función tomaba una cadena como su primer argumento. Las funciones fueron consideradas lo suficientemente importantes como para ponerlas en las cadenas mismas, lo que tenía sentido para funciones como lower, upper y dividir. Pero muchos programadores de Python se opusieron al nuevo método de método, argumentando que debería ser un método de la lista, o que no debería no debería moverse en absoluto, sino simplemente permanecer parte del antiguo módulo de cadenas (que (que todavía tiene muchas cosas útiles). Yo uso el nuevo método de unión exclusivamente, pero verás código escrito de cualquier manera pero verás código escrito de cualquier manera, y si te molesta puede usar la antigua función string.join en su lugar.
--- Mark Pilgrim, Dive into Python