在 Python 中使用列表理解访问索引

Accessing index using list comprehesion in 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)]

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

非常感谢您的帮助:)

对于带有 if 条件的列表理解,它应该看起来像这样 [function(x) if condition(x) else other_function(x) for x in list] 所以对于你的情况,我会说:

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

weekend = [date.strftime("%m/%d/%Y, %H:%M:%S")  for date in date_list if (date.weekday()==5 or date.weekday()==6)]
dates=[]
for date in date_list:
    dates.extend([date.strftime("%m/%d/%Y, %H:%M:%S"),date.strftime("%m/%d/%Y, %H:%M:%S")])


最好用strftime把日期时间转换成你想要的格式:https://docs.python.org/fr/3.6/library/datetime.html#strftime-and-strptime-behavior

这个

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)

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