想象一下我有以下两个列表。
列出年份-包含1901年至2099年之间的所有年份
years=[1901,...,2099]
列出leap年-包含1901年和2099年之间的所有leap年
我想创建一个非jump_years列表,其中包含第一个列表中非leap年的所有元素。
对于leap年列表,我使用range(1901,2100,4)
进行迭代,但是我无法列出非leap年列表。算法应该是什么?
我实际上没有任何代码,因为这是一个棘手的问题。
答案 0 :(得分:2)
我认为这就是您想要的:
[i for i in years if i not in leap_years]
如果years
中没有包含数字,请填写leap_years
中的数字
答案 1 :(得分:2)
years =[i for i in range(1901,2100)]
leap_year = [i for i in range(1904,2100,4)]
result = list(set(years)-set(leap_year))
使用列表中的set
属性比使用if year in list
答案 2 :(得分:1)
首先,range(1901,2100,4)
不会为您提供1901年至2099年之间的leap年列表。range(1904,2100,4)
会为您提供。
该算法可能类似于(以伪代码):
non-leap years is the empty list
for year in range(1901, 2099):
if year%4 != 0:
add year to non-leap years
答案 3 :(得分:-1)
简单的列表理解就足够了,只要找到不在leap_years
((年列表)中但在all_years
(所有年列表)中的所有年份
non_leap_years = [year for year in all_years if year not in leap_years]
另一种方法是将两者都转换为集合,并采用集合差异
non_leap_years = list(set(all_years) - set(leap_years))
作为一个小窍门,我们已经有了一个calendar.isleap函数,它将告诉您年份是否为leap年
import calendar
all_years = list(range(1901,2100))
leap_years = [year for year in all_years if calendar.isleap(year)]