[英]Improving Python List Comprehension to Eliminate Nested Arrays
我正在尝试创建一种列表理解功能,以提高我已有的列表理解能力。
我有一个数字列表,代表一个月的时长。
months = [35, 28, 28, 35, 28, 28, 35, 28, 28, 35, 28, 28]
我想将此数组扩展为一个全年长度的数组,并且该数组中的每个值代表该天(索引)所属的星期。
目前,我正在通过两个列表推导来执行此操作。
weeks = [w for w in range(sum(months)) if w % 7 == 0]
weeks_expanded = [day for week in [[d + 1] * 7 for d in range(len(weeks))] for day in week]
我想知道如何在不使长度为7的数组的情况下将7次添加到新列表中。我试图摆脱在weeks_expanded中扁平化内部列表理解的添加步骤。 [[d + 1] * 7 for d in range(len(weeks))]
谢谢您的帮助。
基本上,您将为weeks
序列生成每7个数字的序列,直到年总天数,所以这也可行:
weeks = range(0, sum(months), 7)
weeks_expanded
list只是一个重复的整数序列,从1开始,每个整数重复7次,一直到sum(months) // 7
,包括sum(months) // 7
,所以您可以这样做:
weeks_expanded = [wn for wn in range(1, (sum(months) // 7) + 1) for __ in range(7)]
这在列表推导中使用了一个嵌套循环,该循环仅迭代7次。 您还可以使用itertools.product()
迭代器将其展平为单个循环:
from itertools import product
weeks_expanded = [wn for wn, __ in product(range(1, (sum(months) // 7) + 1), (None,) * 7)]
这将使用7个None
引用的元组添加重复,然后循环将忽略这些值。
这两个版本都不需要weeks
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.