2016-10-25 2 views
1

Je voudrais multiplier un des éléments de la liste 2D par un entier. Cependant, une fois que j'exécute le code, je reçois ce qui suit: je m'attendais à ce que le résultat soit juste un tuple, plutôt qu'une liste, et je voudrais que ce soit un tuple plutôt qu'une liste.Python - Multiplier un élément de la liste 2D

[3, 3, 3] 
[6, 6, 3, 3, 3, 3] 

Ceci est mon code:

list = [[0.5],[0.3],[0.1]] 

def funcOne(juv):  
    newAd = juv * list[0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1]) + (sen* list[2]) 
    return newSen 

print(funcOne(3)) 
print(funcTwo(2,4)) 

Ma sortie souhaitée pour funcOne serait d'avoir 3 * 0,5 = 1,5, où "0.5" est la liste [0]. Je ne suis pas sûr de savoir comment modifier mon code afin d'atteindre ce résultat.

+0

On ne sait pas. S'il vous plaît pouvez-vous modifier la question avec l'entrée d'échantillon et la sortie requise afin de le rendre plus clair pour les autres –

+1

Par défaut, une liste multipliée par un nombre retournera une liste. Si vous voulez renvoyer un tuple à la place, vous devrez le convertir en un seul. (par exemple, ligne de retour (newAd)). Voulez-vous vraiment dire un "tuple" cependant? Je peux lire mal, mais il semble que vous attendiez une sortie très différente. – TripleD

+0

@TripleD Salut, j'ai édité mon code, et je ** veux ** veux une sortie de tuple, comme 3 * liste [0] pour produire 1.5. C'est parce que la liste [0] est égale à 0,5 – Test1234

Répondre

2

En fait, je ne comprends toujours pas votre explication de la sortie attendue. Je lance simplement votre code la sortie est ci-dessous:

[0.5, 0.5, 0.5] 
[0.3, 0.3, 0.1, 0.1, 0.1, 0.1] 

La raison pour laquelle votre fonction retourne une liste au lieu de multiplier l'un des éléments dans la matrice 2d est que vous utilisez l'index de l'élément dans la matrice 2d d'une mauvaise manière. Voici votre code:

list = [[0.5],[0.3],[0.1]] 

def funcOne(juv):  
    newAd = juv * list[0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1]) + (sen* list[2]) 
    return newSen 

print(funcOne(3)) 
print(funcTwo(2,4)) 

Dans votre code, lorsque vous utilisez juv * list[0] dans la fonction funcOne, il fait exécuter comme 3 * [0.5], où [0.5] est le premier élément de la matrice 2d (liste). Vous pouvez exécuter dans l'interpréteur Python et constater que le résultat de 3 * [0.5] est [0.5, 0.5, 0.5], ce qui signifie qu'il suffit de répliquer les éléments de la liste trois fois.

Si vous voulez calculer comme [[0.5 * 3], [0.3], [0.1]], vous devriez changer un peu de votre code comme suit:

def funcOne(juv):  
    newAd = juv * list[0][0] 
    return newAd 

def funcTwo(ad,sen): 
    newSen = (ad* list[1][0]) + (sen* list[2][0]) 
    return newSen 

---------- mise à jour

Si vous voulez retourne la liste comme [[1.5], [0.3], [0.1]]. Changez le code en

def funcOne(juv):  
    list[0][0] = juv * list[0][0] 
    return list 

Espérons que ça aide.

+0

Désolé pour le malentendu. Ma sortie désirée pour funcOne serait d'avoir 3 * 0.5 = 1.5, où "0.5" est la liste [0].Je ne suis pas sûr de savoir comment modifier mon code afin d'atteindre ce résultat. – Test1234

+0

Si vous voulez seulement renvoyer la valeur spécifique '1.5', vous pouvez utiliser la fonction que j'ai éditée ci-dessus. Si vous voulez retourner une liste comme [[1.5], [0.3], [0.1]]. Vous pouvez changer le code comme ci-dessous: – JoshuaW1990

+0

Je me demandais si vous étiez en mesure d'expliquer pourquoi j'ai besoin de la liste [0] [0]? – Test1234

0

juste retour le list converti en tuple:

def funcOne(juv):  
    newAd = juv * list[0] 
    return tuple(newAd) # convert to tuple 

va de même pour funcTwo.


Ensuite, pour reproduire votre utilisation de sortie souhaitée:

>>> list = [[3], [6], [3]] 
>>> print(funcOne(3)) 
(3, 3, 3) 
>>> print(funcTwo(2, 4)) 
(6, 6, 3, 3, 3, 3)