Я пытаюсь написать функцию, которая принимает 2 переменные списка, т.е. first_names и last_names.

Я использую вложенный цикл for в своей функции, чтобы перебрать оба списка и добавить значения, чтобы вернуть новый «комбинированный» список переменных.

Функция принимает два параметра списка, но перебирает только первое значение индекса [0] каждого списка и выводит, что - цикл заканчивается.

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:
                combined.append(first+last)
                return combined

print(NameCombine(first_names,last_names))

Ожидаемый результат: DaveSmith, JamesJones, SteveJackson

Фактический вывод: DaveSmith

Я ожидаю новый объединенный список как имени, так и фамилии в каждом индексе.

Но он возвращает первые два значения каждого списка, а затем цикл заканчивается.

0
DJoseph1 4 Июл 2019 в 15:51

4 ответа

Лучший ответ

Вы можете объединить их с zip в понимании:

def NameCombine(first_names,last_names):
    return [a+b for a, b in zip(first_names, last_names)]
2
zipa 4 Июл 2019 в 13:20

Поскольку большинство из них здесь отвечают конкретно на ваш вопрос. Я хотел бы добавить другой способ достижения решения этой проблемы, как показано ниже,

Здесь я использовал map и add из операторского модуля

list(map(operator.add, first_names, last_names))
# ['DaveSmith', 'JamesJones', 'SteveJackson']
0
Raja Sakthiyan 11 Июл 2019 в 17:54

Вы можете попробовать с этим кодом.

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))
0
Pasan Chamikara 4 Июл 2019 в 13:08

Питоническое и списочное понимание - мой любимый путь. Но если вы действительно хотите решение с использованием вложенного цикла, это будет работать для вас. Просто использовал ваш код и добавил дополнительное условие, чтобы печатать только желаемый результат.

Результаты этого решения: ['DaveSmith', 'JamesJones', 'SteveJackson']

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
Varun Verma 4 Июл 2019 в 16:09