在 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)
如果您有更多层级的嵌套,也可以使用此方法。
你好,最近我正在尝试弄清楚列表理解。看起来我很讨厌这个:/
这是我尝试使用列表推导重写的代码
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)
如果您有更多层级的嵌套,也可以使用此方法。