python – 枚举列表中的列表

我约会时发生的事件发生在日期.我想在显示日历时枚举事件列表.

此外,我需要能够从列表中删除一个事件.

def command_add(date, event, calendar):
    if date not in calendar:
        calendar[date] = list()
    calendar[date].append(event)


calendar = {}
command_add("2015-10-29", "Python class", calendar)
command_add("2015-10-12", "Eye doctor", calendar)
command_add("2015-10-12", "lunch with sid", calendar)
command_add("2015-10-29", "Change oil in blue car", calendar)
print(calendar)

def command_show(calendar):
    for (date, event) in calendar:
       print(date, enumerate(event))

command_show(calendar)

我以为这会让我访问日期下的辅助列表并枚举它但我收到错误.

示例:

command_show(calendar)
    2015-10-20:
        0: stackover flow sign up
    2015-11-01:
        0: * post
        1: banned from stack overflow

解决方法:

只需将command_show()函数更改为此,如果不使用dict.items(),则只能获取键(不是键和值):

def command_show(calendar):
    for (date, event) in calendar.items():
        print(date+':')
        for i in enumerate(event):
            print('    '+str(i[0])+': '+i[1])

输出:

2015-10-29:
    0: Python class
    1: Change oil in blue car
2015-10-12:
    0: Eye doctor
    1: lunch with sid

关于我为什么这样做:

for i in enumerate(event):
    print('    '+str(i[0])+': '+i[1])

如您所见,我在这里使用enumerate()功能.从文件:

Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration.
The __next__() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.

所以它会返回类似[(0,’Python类’),(1,’眼科医生’),(2,’午餐与sid’)的东西,如果永远是[‘Python类’,’眼科医生’, ‘与sid共进午餐’].

现在我们有[(0,’Python类’),(1,’眼科医生’),(2,’午餐与sid’)],当我们使用for循环就像我在枚举(事件),我在第一个循环中将是(0,’Python类’),在第二个循环中将是(1,’Eye doctor’)等.

然后,如果你想打印像0这样的东西:Python类(在sting前面有一些空格),我们需要手动放置像”这样的空格(例如,可以在这里连接字符串,’foo”bar’是foobar).

然后,因为我是一个元组,我使用的是slice. i [0]可以获得该元组中的第一个元素,i [1]可以获得第二个元素,等等.

因为i [0]是一个整数,我们不能只做0’foobar'(将引发TypeError:不支持的操作数类型:’int’和’str’).所以我们需要使用str()函数将其转换为字符串.然后……也许你会明白的.

你也可以这样做:

for num, event in enumerate(event):
    print('    '+str(num), event, sep=': ')

更清晰?对于num,enumerate(event)中的事件将在第一个循环中给出类似num = 0,evert =’Python class’的内容,并且……正如我所说的那样.

关于sep,您可以查看the document了解更多详情.

上一篇:PYTHON学习0011:enumerate()函数的用法----2019-6-8


下一篇:Python enumerate()内置函数