Возможно ли использовать элементы двух разных списков в качестве параметров функции в Python?

#python #list #function

#питон #Список #функция #python

Вопрос:

У меня есть функция, которая должна принимать два параметра следующим образом

 list_of_ids = [1,2,3]
list_of_names = [bob, joe, frank]
def function(id, name):
    
  

Аргументы функции поступают из этих двух массивов. Поэтому, когда он вызывается каждый раз, это будет похоже:

 def function(1, bob)
def function(2, joe)
def function(3, frank)
  

Я попробовал пару циклов for, подобных этому:

 for id in list_of_ids:
    for name in list_of_names:
        function(id, name)
  

Однако это не дает мне желаемого результата. Любая помощь будет оценена по достоинству.

Комментарии:

1. zip() затем списки повторяются

Ответ №1:

Вы можете использовать zip для объединения двух списков вместе.

Вот пример.

 list_of_ids = [1,2,3]
list_of_names = ['bob', 'joe', 'frank']

def function(id, name):
    return f'{id} {name}'

for id,name in zip(list_of_ids,list_of_names):
    print(function(id,name))


#1 bob
#2 joe
#3 frank
  

zip создает объект ‘zip’, который является итеративным набором двух переданных ему списков / кортежей.

Ответ №2:

В случае, если эти списки содержат неравные элементы, их лучше обрабатывать в generator , как показано ниже:

 def generate_result(lst1,lst2):
    counter = 0
    while counter < len(lst1) or counter < len(lst2):
        if counter >= len(lst1) :
            yield ("NA",lst2[counter]) # Replace with actual function call
        elif counter >= len(lst2) :
            yield (lst1[counter],"NA") # Replace with actual function call
        else:
            yield (lst1[counter],lst2[counter]) # Replace with actual function call
        counter  = 1

list1 = [1,2]
list2 = ["John","James","Cat","Dog","Bed","Red","Some","More"]

for i in generate_result(list1,list2):
    print(i)