piteer
piteer

Reputation: 173

multiplying letter of string by digits of number

I want to multiply letter of string by digits of number. For example for a word "number" and number "123" output would be "nuummmbeerrr". How do I create a function that does this? My code is not usefull, because it doesn't work.

I have only this

def new_word(s):
    b=""
    for i in range(len(s)):
        if i % 2 == 0:
            b = b + s[i] * int(s[i+1])    

return b

for new_word('a3n5z1') output is aaannnnnz .

Upvotes: 0

Views: 944

Answers (3)

bglbrt
bglbrt

Reputation: 2098

Using list comprehension and without itertools:

number = 123
word = "number"

new_word = "".join([character*n for (n, character) in zip(([int(c) for c in str(number)]*len(str(number)))[0:len(word)], word)])

print(new_word)

# > 'nuummmbeerrr'

What it does (with more details) is the following:

number = 123
word = "number"

# the first trick is to link each character in the word to the number that we want
# for this, we multiply the number as a string and split it so that we get a list...
# ... with length equal to the length of the word
numbers_to_characters = ([int(c) for c in str(number)]*len(str(number)))[0:len(word)]

print(numbers_to_characters)

# > [1, 2, 3, 1, 2, 3]

# then, we initialize an empty list to contain the repeated characters of the new word
repeated_characters_as_list = []

# we loop over each number in numbers_to_letters and each character in the word
for (n, character) in zip(numbers_to_characters, word):
    repeated_characters_as_list.append(character*n)

print(repeated_characters_as_list)

# > ['n', 'uu', 'mmm', 'b', 'ee', 'rrr']

new_word = "".join(repeated_characters_as_list)

print(new_word)

# > 'nuummmbeerrr'

Upvotes: 3

Ahmed Tounsi
Ahmed Tounsi

Reputation: 1550

This will solve your issue, feel free to modify it to fit your needs.

from itertools import cycle

numbers = cycle("123")
word = "number"

output = []

for letter in word:
  output += [letter for _ in range(int(next(numbers)))]

string_output = ''.join(output)

EDIT:

Since you're a beginner This will be easier to understand for you, even though I suggest reading up on the itertools module since its the right tool for this kind of stuff.

number = "123"
word = "number"


output = []
i = 0

for letter in word:
  if(i == len(number)):
    i = 0
  output += [letter for _ in range(int(number[i]))]
  i += 1

string_output = ''.join(output)
print(string_output)

Upvotes: 1

Adam.Er8
Adam.Er8

Reputation: 13403

you can use zip to match each digit to its respective char in the word (using itertools.cycle for the case the word is longer), then just multiply the char by that digit, and finally join to a single string.

try this:

from itertools import cycle

word = "number"
number = 123

number_digits = [int(d) for d in str(number)]

result = "".join(letter*num for letter,num in zip(word,cycle(number_digits)))
print(result)

Output:

nuummmbeerrr

Upvotes: 1

Related Questions