例如,我有一个函数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,其余的是组成员的名称。为此,我在main()
中运行以下命令def main():
group_mates = ["Book Club", "Allen", "Karla", "Matt", "Nadia"]
print_members(group_mates[0], group_mates[1:])
然而,当它运行时(afaik)将第二个参数传递为一个元素的元组,即切片列表,因此当它通过for循环时,它只能看到一个元素,即封装的切片列表。像这样:
(['Allen', 'Karla', 'Matt', 'Nadia'])
所以打印出来:
Members of Book Club
['Allen', 'Karla', 'Matt', 'Nadia']
即使它应该
Members of Book Club
Allen
Karla
Matt
Nadia
是否有另一种方法可以在main()中调用函数print_members(),因此它不会将切片列表封装在元组中?还是有更好的方法来编写print_members()?该函数还需要能够在第一个参数之后接收任意数量的组成员名称,因此是星号,并以与我希望它打印单个列表的元组相同的方式打印它,所以我可以&#39在我把它作为一个参数后,我将列表弄平了。这样做(再次afaik)压扁已经是1d列表的列表,使每个字符成为列表中的自己的元素。我需要每个名称作为自己的元素。任何和所有的帮助将不胜感激。
答案 0 :(得分:1)
为什么要在member_names
中解压缩参数print_members
?
def print_members(group_name, member_names): # <-- here
print("Members of", group_name)
for i in range(len(member_names)):
print(member_names[i])
def main():
group_mates = ["Book Club", "Allen", "Karla", "Matt", "Nadia"]
print_members(group_mates[0], group_mates[1:])
main()
Members of Book Club
Allen
Karla
Matt
Nadia
正如@DavidJohnColemanII所建议的,您可以使用字典将俱乐部的成员映射到俱乐部:
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)