Python检查int是否在列表的某个对象中

时间:2018-02-01 10:33:55

标签: python datetime if-statement

我目前有一个包含以下数据的结果集:

((0L, datetime.date(2018, 1, 29)), (0L, datetime.date(2018, 1, 30)), (0L, 
datetime.date(2018, 1, 31)), (0L, datetime.date(2018, 2, 1)))

我正在尝试检查当前日期的状态是0还是1.

目前我这样做:

   if checkdate():
        if result_set[0] == 1:

checkdate函数检查当前日期是否在列表中。 但在那里我试图弄清楚该日期是否具有状态1或0.状态是列表中的第一项(0l和1L)mysql以某种方式在0和1之后添加L。

目前我的checkdate功能如下所示:

return any(d[1] == cd for d in result_set)

会喜欢一些帮助!

编辑:现在,checkdate看起来像这样:

return next(((s,d) for (s,d) in dates if d == date), None)

entry = checkdate([x[1] for x in result_set], cd)
            if entry is not None:

2 个答案:

答案 0 :(得分:1)

您应该更改checkdate功能以返回实际的(status, date)对,而不仅仅是这样一对是否存在。为此,您可以将any表达式几乎1:1转换为next语句,如果不存在此类对,则使用None作为默认值。

例如,像这样(我也改变了函数来获取参数而不是使用全局变量,但这对于它来说并不重要)。

import datetime
result_set = ((0, datetime.date(2018, 1, 29)), (1, datetime.date(2018, 1, 30)),   
              (0, datetime.date(2018, 1, 31)), (0, datetime.date(2018, 2, 1)))
cd = datetime.date(2018, 1, 30)

def checkdate(dates, date):
    return next(((s, d) for (s, d) in dates if d == date), None)

entry = checkdate(result_set, cd)
if entry is not None and entry[0] == 1:
    print("found")

或者像这样,如果您更喜欢使用全球result_setcd变量:

def checkdate():
    return next(((s, d) for (s, d) in result_set if d == cd), None)

entry = checkdate()
if entry is not None and entry[0] == 1:
    print("found")

答案 1 :(得分:0)

更改函数checkdate以返回列表中当前日期的索引,如果不存在,则返回-1。

然后你可以简单地做一些事情:

index = checkdate()
if index >= 0 and result_set[index][0] == 1:
    ...