如何将可变数量的参数带入函数并将它们用作索引?
How can I take a variable number of arguments into a function and use them as indices?
这是一个没有函数的例子:
my_string = "tremendeous"
my_tuples = (my_string[3], my_string[7])
现在如果我想概括它,我不知道如何处理使元组的大小可变?
如果用户想要 1 个索引、3 个索引或 5 个索引怎么办?
def doIt(my_string, *indices):
my_tuples = (my_string[indices_1], my_string[indices_2] .... my_string[indices_n])
return my_tuples
有人可以调用:doIt("tremendeous", 3) 或 doIt("tremendeous", 3, 5) 或 doIt("tremendeous", 0, 3, 4, 4)
我知道我可以使用“*”来接受多个参数,但是我怎样才能将可变数量的参数提供给 my_tuples?
您可以使用 operator.itemgetter
创建一个函数,该函数从具有给定索引的可迭代对象(您的字符串)中获取项目,通过将传递的参数解压缩为位置参数来将索引传递给函数
from operator import itemgetter
def foo(my_string, *indices):
return itemgetter(*indices)(my_string)
my_string = "tremendeous"
foo(my_string, 3, 7) # ('m', 'e')
我相信这就是您要找的:
In [10]: def doit(s, *indices):
...: return tuple(s[i] for i in indices)
In [11]: doit("tremendous", 1, 3, 5, 7)
Out[11]: ('r', 'm', 'n', 'o')
看到这个SO question about "tuple comprehensions"。
这是一个没有函数的例子:
my_string = "tremendeous"
my_tuples = (my_string[3], my_string[7])
现在如果我想概括它,我不知道如何处理使元组的大小可变?
如果用户想要 1 个索引、3 个索引或 5 个索引怎么办?
def doIt(my_string, *indices):
my_tuples = (my_string[indices_1], my_string[indices_2] .... my_string[indices_n])
return my_tuples
有人可以调用:doIt("tremendeous", 3) 或 doIt("tremendeous", 3, 5) 或 doIt("tremendeous", 0, 3, 4, 4)
我知道我可以使用“*”来接受多个参数,但是我怎样才能将可变数量的参数提供给 my_tuples?
您可以使用 operator.itemgetter
创建一个函数,该函数从具有给定索引的可迭代对象(您的字符串)中获取项目,通过将传递的参数解压缩为位置参数来将索引传递给函数
from operator import itemgetter
def foo(my_string, *indices):
return itemgetter(*indices)(my_string)
my_string = "tremendeous"
foo(my_string, 3, 7) # ('m', 'e')
我相信这就是您要找的:
In [10]: def doit(s, *indices):
...: return tuple(s[i] for i in indices)
In [11]: doit("tremendous", 1, 3, 5, 7)
Out[11]: ('r', 'm', 'n', 'o')
看到这个SO question about "tuple comprehensions"。