Python 封装在“元组”中的切片列表,如何输出和打印列表元素?

Python 封装在“元组”中的切片列表,如何输出和打印列表元素?,python,list,parameters,tuples,slice,Python,List,Parameters,Tuples,Slice,例如,我有一个函数print_members,它应该打印传入的2个参数、给定组的名称和组成员的名称: def print_members(group_name, *member_names): print("Members of", group_name) for i in range(len(member_names)): print(member_names[i]) 在main中,我创建了一个需要打印的列表,其中列表的第一个元素是group_name,其余

例如,我有一个函数print_members,它应该打印传入的2个参数、给定组的名称和组成员的名称:

def print_members(group_name, *member_names):
    print("Members of", group_name)

    for i in range(len(member_names)):
        print(member_names[i])
在main中,我创建了一个需要打印的列表,其中列表的第一个元素是group_name,其余元素是group成员的名称。为此,我在main中运行以下命令

def main():
    group_mates = ["Book Club", "Allen", "Karla", "Matt", "Nadia"]
    print_members(group_mates[0], group_mates[1:])
但是,当它运行时,它会将第二个参数作为一个元素的元组传递,即切片列表,因此当它通过for循环时,它只会看到一个元素,即封装的切片列表。像这样:

(['Allen', 'Karla', 'Matt', 'Nadia'])
所以它打印:

Members of Book Club
['Allen', 'Karla', 'Matt', 'Nadia']
即使它应该是

Members of Book Club
Allen
Karla
Matt
Nadia

是否有其他方法可以在main中调用函数print_members,这样它就不会将切片列表封装在元组中?或者有没有更好的方式来书写打印用户?该函数还需要能够在第一个参数后面输入任意数量的组成员名称,因此是星号,并以与我希望它打印单个列表的元组相同的方式打印它,因此我无法在将列表作为参数获取后将其展平。这样做会再次将已经是1d列表的列表展平,使每个字符在列表中成为自己的元素。我需要每个名称作为它自己的元素。非常感谢您的帮助。

为什么要在print\u members中解包参数成员名称

替代数据结构: 根据@davidjohncolemani的建议,您可以使用字典将俱乐部与其成员的集合进行映射:

group_mates = {"Book Club": ["Allen", "Karla", "Matt", "Nadia"]}
并迭代要打印的键和值:

for group, members in group_mates.items():
    print(f"Members of {group}:", end='\n')
    for member in members:
        print(member)

为什么函数print_成员在参数:*member_name中有*?这表示*args:。如果删除*函数,则函数将执行您希望它执行的操作。列表已经是可变的,这意味着它的长度和元素数量已经可以改变,而*意味着列表的数量可以改变。另外,我建议在列表之外找到另一种对象类型来解决这个问题。我会考虑使用python字典。@DavidJohnColemanII函数需要能够将名称作为逗号分隔的参数,而不仅仅是带有组名和成员名的列表,例如print_membersBook Club、Allen、Karla、Matt、Nadia,这就是为什么论证中有一个星号的原因参见@ReblochonMasque在回答我关于如何处理可变参数的评论。很好的解决方案。我会添加一个建议,在列表之外使用不同的对象类型。我认为哈希表/dict对于OP似乎要解决的问题更有效。好的一点,我在回答中补充道,谢谢你建议的改进。@ReblochonMasque抱歉我没有说清楚。该函数还应该能够将名称作为逗号分隔的参数,而不仅仅是包含组名和成员名的列表。因此,它应该能够接受印刷会员书俱乐部,艾伦,卡拉,马特,娜迪亚和打印相同的。我宁愿使用列表,因为这正是我试图学习的,如果你想让你的函数采用args,比如print_members book Club、Allen、Karla、Matt、Nadia,那么这就是学习*args和**kwargs如何工作的问题。你可以在这里读到:。您的函数原型将是:def print_members*args:。group_name=args[0],member_name=args[1:]如果要添加选项以获取可能是列表或各种字符串的输入参数,则需要添加逻辑来检查args:lenargs的长度和args:typeargs[0]的类型。
group_mates = {"Book Club": ["Allen", "Karla", "Matt", "Nadia"]}
for group, members in group_mates.items():
    print(f"Members of {group}:", end='\n')
    for member in members:
        print(member)