首页 > 解决方案 > 在 Python 中使用列表综合访问索引

问题描述

你好最近我想弄清楚列表理解。看起来我很讨厌这个:/

这是我试图使用列表理解重新制作的代码

base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(61)]
del date_list[0]
date_list.reverse()

weekend = []
dates = []
for idx, val in enumerate(date_list):
    dates.append(str(val)[0:10])
    dates.append(str(val)[0:10])
    case = val.isoweekday()
    if case == 6 or case == 7:
        weekend.append(str(val)[0:10])

我查看了如何使用这种方法使用枚举,我发现了这个:

[val for idx, val in enumerate(date_list)]

但我不知道如何继续这个想法。

我真的很感激一些帮助:)

标签: pythonlist-comprehension

解决方案


dates = []
for idx, val in enumerate(date_list):
    dates.append(str(val)[0:10])
    dates.append(str(val)[0:10])

可以重新设计为列表理解,但请注意您可能会以低可读性结束。考虑类似但更简单的情况:

digits = [1,2,3,4,5,6,7,8,9]
numbers = []
for val in digits:
    numbers.append(val)
    numbers.append(val)
print(numbers)

输出

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]

第一步是重新编写代码,使其恰好有一个.append,在这种情况下,将for循环替换为

for val in digits:
    for _ in range(2):
        numbers.append(val)

正如您可能会检查输出是否相同,最后一步是将其重写为列表理解,在嵌套的情况下for从左到右是浅深的,因此结果是

digits = [1,2,3,4,5,6,7,8,9]
numbers = [val for val in digits for _ in range(2)]
print(numbers)

如果您有更多级别的嵌套,也可以使用此方法。


推荐阅读