Soy bastante nuevo en Python y estoy completamente confundido por .join() que he leído es el método preferido para la concatenación de cadenas.

He intentado:

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

y tiene algo como:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

¿Por qué se hace esto? No debería el 595 sólo se añade automáticamente?

  • Creo que ha tocado su Yubikey mientras el programa se ejecuta

9 Comentarios

  1. 297

    Examine cuidadosamente su salida:

    5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
    ^                 ^                 ^

    He resaltado los «5», «9», «5» de su cadena original. El Python join() método es un método de cadena, y toma un lista de cosas para unirse con la cadena. Un simple ejemplo puede ayudar a explicar:

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

    La «,» se inserta entre cada elemento de la lista dada. En su caso, su «lista» es la representación de la cadena «595», el cual es tratado como la lista de [«5», «9», «5»].

    Parece que usted está buscando + lugar:

    print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid
    • ¿Por qué no es: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxss5wlfgalgbxoahekxss ? Con la cadena de caracteres anexada al último elemento?
    • Una de las razones es que esto da join la útil propiedad de la inversa de split (docs.python.org/library/stdtypes.html#str.split)
    • Si desea otro delimitador, poner una cadena vacía al final de la lista. ','.join(['a', 'b', 'c', '']) da «a,b,c,»
    • OP probablemente era confuso string.join con os.path.join que de hecho concatena caminos
  2. 89

    join toma un iterable cosa como un argumento. Por lo general, es una lista. El problema en tu caso es que una cadena es en sí mismo iterable, dando a cada personaje en turno. El código se rompe este:

    "wlfgALGbXOahekxSs".join("595")

    que actúa de la misma como este:

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

    y así produce una cadena de caracteres:

    "5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

    Cadenas como iterables es uno de los más confuso principio problemas con Python.

    • upvote para señalar lo que podría ser el quid de la confusión: las cadenas son iterable por lo que actúan como listas de caracteres.
  3. 58

    Para añadir una cadena, sólo concatenar con el + signo.

    E. g.

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

    join conecta cuerdas junto con un separador. El separador es lo que
    lugar justo antes de la join. E. g.

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

    Unirse toma una lista de cadenas de caracteres como parámetro.

    • Este tipo de directa y concisa respuesta debe ser defendido por nuestra comunidad. @Dan
  4. 7

    join() es la concatenación de todos los elementos de la lista. Para concatenar sólo dos cadenas de caracteres «+» tendría más sentido:

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

    Para ampliar un poco más sobre lo que otros están diciendo, si usted desea usar unirse simplemente para concatenar dos cadenas, haría esto:

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

    Hay una buena explicación de por qué es costoso para el uso + para la concatenación de un gran número de cadenas de aquí

    Operador más está perfectamente bien la solución para concatenar dos Python
    las cadenas de caracteres. Pero si añades más de dos cadenas (n > 25) , que
    puede ser que desee pensar en algo más.

    ''.join([a, b, c]) truco es una optimización del rendimiento.

  7. 0

    En la prestación de este como de entrada ,

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

    Python devuelve como salida :

    'server=mpilgrim;uid=sa;database=master;pwd=secret'
  8. 0
    list = ["my", "name", "is", "kourosh"]   
    " ".join(list)

    Si esta es una entrada, utilizando el método de combinación, podemos añadir que la distancia entre las palabras y también convertir la lista de la cadena.

    Este es Python salida

    'my name is kourosh'
  9. 0

    «».únete a puede ser utilizado para copiar la cadena en una lista a una variable

    >>> myList = list("Hello World")
    >>> myString = "".join(myList)
    >>> print(myList)
    ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
    >>> print(myString)
    Hello World

Dejar respuesta

Please enter your comment!
Please enter your name here