2017-10-10 4 views
0

Je ne connais pas encore le codage en longueur et j'ai besoin d'aide. On m'a donné une chaîne de longueur d'une série d'entiers suivie de caractères qui incluent des lettres/caractères.

Par exemple, j'ai une chaîne:Conversion d'une liste de n-uplets en une chaîne

1-4c8k2) 

Et je dois le convertir en:

-cccckkkkkkkk)) 

Ce que je l'ai fait est de convertir la chaîne RLL dans une liste de tuples :
[('1','-'),('4','c'),('8','k'),('2','c')]

Et essayé de créer une fonction qui transformerait en une chaîne mais je reçois un
TypeError: ne peut pas multiplier par séquence non-int de type « str ».

def decode(lst): 
    q = '' 
    for count, character in lst: 
     q += count * character 
    return q 

Je suis en train de penser à un moyen d'améliorer la complexité de l'espace au lieu de créer une nouvelle liste de tuples et plus, en essayant de résoudre ce TypeError.

+0

Quelle version de python vous utilisez? Cela fonctionne pour moi dans 3.5 –

+0

@PatrickHaugh Strange .. Je cours 3.4.3 –

Répondre

5

Je soupçonne que ce qui est arrivé est que vous avez oublié de convertir les comptes en ints:

>>> 3 * 'a' 
'aaa' 

>>> '3' * 'a' 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: can't multiply sequence by non-int of type 'str' 

>>> int('3') * 'a' 
'aaa' 
+0

Wow, c'était vraiment idiot de ma part. Merci tas! J'ai réalisé que j'avais créé mes tuples comme ('2', ')') plutôt que (2, ')'). –

0

Vous essayez à travers cette façon:

lst = [('1','-'),('4','c'),('8','k'),('2','c')] 
def decode(lst): 
    q = '' 
    for count, character in lst: 
     q += int(count) * character 
    return q 

print(decode(lst)) 

Sortie:

-cccckkkkkkkkcc 

Vérifiez ce code here

+0

Merci! C'est exactement ce dont j'avais besoin depuis que j'avais formaté ma liste d'entiers sous forme de chaînes de sorte que cela corrige le problème –

+0

welcome @ marty_78632 –