Использование списка в качестве параметров функции

#python

Вопрос:

У меня есть такой список ['a1,b1,c1', 'a2,b2,c2', 'a3,b3,d3']
и я пытаюсь либо написать функцию , либо цикл for, который будет принимать каждый набор этих чисел в качестве входных
данных, например, при первом запуске a=a1, b=b1, c=c1 , во второй раз он будет выполняться a=a2, b=b2 c=c2 в качестве входных данных

Я видел несколько потоков, использующих функции со звездочками, как это some_func(*params)
но я не вижу, как сделать это циклом, который требует комбинации входных данных, как я хотел

или с помощью диктанта можно было бы решить и сделать это?

примером может быть что-то вроде (извините, что не делаю это суперспецифичным и конкретным)

 
def apply(a, b, c):

x = something
y = something_else

(hello, there) = somefunction(x, y, size=a) 

sky = anotherfunction(beta[1], put=b, call=c)

 

любая помощь будет признательна, или, если раньше был подобный вопрос, буду рад, если он будет связан

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

1. а1-это не число

2. У вас есть строка с запятыми в качестве входных данных — сначала вам нужно будет ее проанализировать.

3. спасибо, да, я использую a1 здесь для представления, иначе размещение всех чисел здесь делает это более запутанным?

4. например, превратить их в отдельные списки?

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

Ответ №1:

Предположим, у вас есть список strings и функция func

 strings = ['a1,b1,c1', 'a2,b2,c2', 'a3,b3,d3']

def func(a, b, c):
    # your function
    pass
 

Структура будет

 for string in string:
    func(*map(int, string.split(",")))
 

строка map(int, string.split(",")) разделится и составит список, как [1, 2, 3] для '1,2,3' .

Затем * символ распределит числа по одному для каждого параметра, так как list [1, 2, 3] вызовет функцию like func(a=1, b=2, c=3) .

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

1. здравствуйте, просто дополнительный вопрос, если сказать, что какое-то значение в a, b, c является плавающим, смогут ли они быть плавающими и промежуточными, как они есть, или я должен решить, сохранить ли их как плавающие или промежуточные func(*map(int, string.split(","))) ?

2. @jaxan Я думаю, что это зависит от тебя и от того, что тебе нужно сделать

3. @jaxan если вы хотите это сделать, вы можете писать [(int(x) if x.isnumeric() else float(x)) for x in string.split(',')] в одной строке вместо карты, вы также можете сделать многострочную самостоятельно.

Ответ №2:

Если я правильно понял, используйте переменные аргументы следующим образом:

 def fun(*args):
    """Toy function"""
    return sum(args)   10


arguments = ["1,2,3", "1,5,6"]

for argument in arguments:
    res = fun(*map(int, argument.split(",")))
    print(res)
 

Выход

 16
22
 

Выражение:

 map(int, argument.split(","))
 

создает итерацию целых чисел из argument строки. Тот * распаковывает эти аргументы.

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

1. Спасибо! но что, если в случае, когда a, b и c распределены в функции? как сказать test = 1 2 a ———— test2 = b ———— hello = (x = 1, y =2, z =c) , сможет ли это также сработать?

2. Извините, но я не понимаю этих примеров

3. скажем , как вместо того, чтобы использовать sum(args) , a, b, c используется по-разному (вызывается в разное время и, возможно, даже несколько раз внутри функции)

4. извините, что все так запутал

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