Python equivalent for PHP's implode?
Asked Answered
A

2

134

Is there an equivalent for PHP's implode in Python? I've read in and split up a set of delimited words, and now I want to sort them out in random orders and print the words out with spaces in between.

implode — Join array elements with a string

http://php.net/manual/en/function.implode.php

Aara answered 21/8, 2012 at 10:46 Comment(0)
N
225

Use the strings join-method.

print(' '.join(['word1', 'word2', 'word3']))

You can join any iterable (not only the list used here) and of course you can use any string (not only ' ') as the delimiter.

If you want a random order like you said in your question use shuffle.


In the comment there was the question why Python throws an error if you do "glue".join(["startString", 123, "endString"]). join operates on an iterable of strings. There is no implicit type conversion in Python.

But of course there is a solution. Just do the conversion yourself.

"glue".join(map(str, ["startString",123,"endString"]))

Nobleminded answered 21/8, 2012 at 10:48 Comment(2)
join() works great if you have an array of strings, but if any member of the array is int instead of a string, you'll get a TypeError, php's implode doesn't do that, even in strict mode =/ <?php declare(strict_types=1);var_dump(implode("glue",["startString",(int)123,"endString"])); gives you string(31) "startStringglue123glueendString" but in python doing "glue".join(["startString",123,"endString"]); gives you TypeError: sequence item 1: expected str instance, int foundCounterpoison
@Counterpoison fix is "_".join(map(str, tuple)) or trough comprehension "_".join([str(x) for x in tuple])Narva
A
15

Okay I've just found a function that does what I wanted to do;

I read in a file with words in a format like: Jack/Jill/my/kill/name/bucket

I then split it up using the split() method and once I had the word into an list, I concatenated the words with this method:

concatenatedString = ' - '.join(myWordList)
# ie: delimeter.join(list)
Aara answered 21/8, 2012 at 10:54 Comment(1)
I don't get why you want to join. First you have a line, you split it into characters and then join it again. Why don't you replace the characters in the first place? (You miss the 'random' part in your own answer, not relevant anymore?)Tote

© 2022 - 2024 — McMap. All rights reserved.