切片列表封装在"元组"中,如何获取列表元素并打印?

时间:2017-11-06 04:11:17

标签: 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,其余的是组成员的名称。为此,我在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列表的列表,使每个字符成为列表中的自己的元素。我需要每个名称作为自己的元素。任何和所有的帮助将不胜感激。

1 个答案:

答案 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)