如何从其他2个列表中创建元素列表

时间:2019-05-03 10:02:24

标签: python python-3.x

想象一下我有以下两个列表。

列出年份-包含1901年至2099年之间的所有年份

years=[1901,...,2099]

列出leap年-包含1901年和2099年之间的所有leap年

我想创建一个非jump_years列表,其中包含第一个列表中非leap年的所有元素。

对于leap年列表,我使用range(1901,2100,4)进行迭代,但是我无法列出非leap年列表。算法应该是什么?

我实际上没有任何代码,因为这是一个棘手的问题。

4 个答案:

答案 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)]