python - 在 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)]
但我不知道如何继续这个想法。
我真的很感激一些帮助:)
解决方案
这
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)
如果您有更多级别的嵌套,也可以使用此方法。
推荐阅读
- azure - 在 ARM 模板中为所有可能的OutboundIpAddresses 配置 FirewallRules
- solr - edismax 查询 - 如何在 solr 中实现类似 db2 的搜索
- mongodb - 使用 Rasa 进行 NoSQL 注入
- php - 内部页面的htaccess重定向问题
- python - 我的动画图像没有使用 matplotlib imshow 动画改变
- javascript - 如何将 404 错误 XMLHttpRequest 修复到本地主机
- google-app-engine - GAE/Go 项目的测试代码放在哪里?
- r - 如何匹配 ID 号以合并两个数据框
- linux - 查找总大小的所有文件模式
- c# - 无法使用数据绑定 DataGridView 设置 Row.Readonly=false