给定输入值时,从列表列表中返回列表

时间:2017-12-28 16:16:15

标签: python python-3.x

我已经在这个问题上花了一些时间,但似乎无法找到解决方案,因此我请求帮助。 PS:编程还是有点新鲜

我在列表中有列表:

[(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')]

我想要的是带有列表的新列表,在输入“monday”时输入:

[(2012, 'january', 'monday'), (2012, 'february', 'monday')]

到目前为止我的代码:

lists = [(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')]

day = input("Give day: ") #monday

def select_monday(lists, day):
    list2 = []
    for list in lists:
        if list[2] == day: #from here I'm stuck and do not know how to continue
            list2.append(list[2])
        else:
            return None
    return list2

结果:None

我不知道如何获得具有特定值的所有列表

3 个答案:

答案 0 :(得分:4)

您的代码很好,除了您不需要else语句,否则在下一次迭代中您将丢失前面步骤的结果;你也应该实际调用你的函数:

lists = [(2012, 'january', 'monday'), (2012, 'february', 'monday'), (2012, 'january', 'tuesday')]

day = input("Give day: ") #monday

def select_monday(lists, day):
    list2 = []
    for list in lists:
        if list[2] == day: #from here I'm stuck and do not know how to continue
            list2.append(list)
    return list2

print(select_monday(lists, day))

这是一个更紧凑的功能:

def select_monday_2(lists, day):
    return list(filter(lambda x: x[2] == day, lists))

print(select_monday_2(lists, day))

答案 1 :(得分:0)

如果当天不是星期一,则返回None。 这样做效果更好:

def select_monday(lists, day):
    list2 = []
    for lst in lists:
        if lst[2] == day:
            list2.append(lst)
    return list2

此外,附上整个清单,而不仅仅是工作日。 最后,最好不要使用list作为变量名,因为它是内置的。

现在:

>>> select_monday(lists, day)
[(2012, 'january', 'monday'), (2012, 'february', 'monday')]

使用列表理解缩短替代方案:

>>> [x for x in lists if x[2] == day]
[(2012, 'january', 'monday'), (2012, 'february', 'monday')]

答案 2 :(得分:0)

这个问题是else语句。如果其中一项检查结果为假,那么它将 WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) -- 1*10^1 or 10 rows , E2(N) AS (SELECT 1 FROM E1 a, E1 b) -- 1*10^2 or 100 rows , Nums(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY @@SPID) FROM E2 a, E2 b) -- 1*10^4 or 10,000 rows INSERT INTO #DateIntervals (PeriodStartDate, PeriodEndDate) SELECT DATEADD(DAY, N * 7 - 7, @StartDate), DATEADD(DAY, N * 7 - 1, @StartDate) FROM Nums WHERE N <= CEILING(DATEDIFF(DAY, @StartDate, @EndDate) / 7.0); 。删除else语句并删除return None语句中列表中的[2],除非您只想追加当天。

append