#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. Возможно, если вы добавите еще несколько конкретных примеров, это поможет мне и другим лучше понять ваш вопрос