0
votes

Comment puis-je obtenir la fonction de ma boucle imbriquée à iTER à l'ensemble de la totalité des variables de liste (au moins 2) et à ajouter à une nouvelle sortie de liste?

J'essaie d'écrire une fonction qui prend 2 variables de liste, c'est-à-dire first_names et last_names .

J'utilise une boucle imbriquée dans ma fonction pour ITERE à la fois par des listes et appendez les valeurs pour renvoyer une nouvelle liste de variable «combinée».

La fonction prend les deux paramètres de la liste, mais iTère via uniquement la première valeur d'index [0] de chaque liste et sorties qui - La boucle se termine. xxx

Sortie attendue: Davesmith, Jamesjones, Stevejackson

Sortie réelle: Davesmith

Je m'attends à une nouvelle liste combinée de la première et de nom de famille à chaque index.

Mais il renvoie les deux premières valeurs de chaque liste, puis la boucle se termine .


3 commentaires

Pensez à l'endroit où vous retournez de la fonction. Combien d'éléments avez-vous itéré à ce moment-là?


Dupliqué possible de Comment concaténer les deux listes d'éléments-sage à Python?


Toutes mes excuses - laissaient la condition de la même chose dans le moment où j'avais expérimenté et oublié de supprimer avant de copier. Édité et corrigé maintenant.


4 Réponses :


0
votes

Vous pouvez essayer avec ce code.

first_names = ["Dave", "James", "Steve"]

last_names = ["Smith", "Jones", "Jackson"]

def NameCombine(first_names, last_names):
    combined = []
    for i in range(0, len(first_names)):
        if last_names[i] != None:
            combined.append(first_names[i] + " " + last_names[i])
        else:
            combined.append(first_names[i])
    return combined

print(NameCombine(first_names,last_names))


2 commentaires

Merci @pasan Chamikara. Bien que cela réalise ma sortie cible, j'essaie toujours de comprendre comment réaliser la même sortie à l'aide d'une boucle imbriquée.


@ Djoseph1 - Une boucle cycliste trois fois imbriquée dans une boucle également à vélo trois fois donne un total de neuf cycles, i. e. Neuf valeurs résultantes, alors que vous voulez seulement trois valeurs résultantes. Par conséquent, une boucle imbriquée ne peut pas atteindre ce que vous voulez.



2
votes

Vous pouvez les combiner avec zip dans la compréhension: xxx


2 commentaires

Cela atteint la production cible et les accessoires à @Pasan Chamikara pour sa réponse qui inclut le formatage également. J'essaie toujours de comprendre si mon code d'origine peut atteindre la même sortie à l'aide d'une boucle imbriquée.


Vous avez le droit logique, mais l'indentation était manquante. Bien que la réponse de @Pasan fonctionnera, mais que cette solution est plus élégante et plus pythonique d'obtenir le même résultat dans une seule ligne de code



0
votes

La pythonique et la compréhension de la liste est ma manière préférée. Mais si vous vouliez vraiment une solution à l'aide d'une boucle imbriquée, cela fonctionnerait pour vous. Il suffit d'utiliser votre code et d'ajouter une condition supplémentaire pour imprimer uniquement le résultat souhaité.

Les résultats de cette solution sont les suivants: ['Davesmith', 'Jamesjones', 'Stevejackson'] P>

first_names = ["Dave", "James", "Steve"]

last_names = ["Smith", "Jones", "Jackson"]

def NameCombine(first_names,last_names):
  combined = []
  for first in first_names:
    for last in last_names:
      if first_names.index(first) == last_names.index(last):
        combined.append(first+last)
  return combined

print(NameCombine(first_names,last_names))


0 commentaires

0
votes

Depuis la plupart d'entre eux, répondez spécifiquement à votre question. Je voudrais ajouter l'autre moyen d'atteindre la solution à ce problème comme ci-dessous,

Ici, j'ai utilisé mappe code> et Ajouter code> à partir du module de l'opérateur p>

list(map(operator.add, first_names, last_names))
# ['DaveSmith', 'JamesJones', 'SteveJackson']


0 commentaires