我已经在这个问题上花了一些时间,但似乎无法找到解决方案,因此我请求帮助。 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
我不知道如何获得具有特定值的所有列表
答案 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