Python:如果任意元素在任意列表中,则返回布尔值

Posted

技术标签:

【中文标题】Python:如果任意元素在任意列表中,则返回布尔值【英文标题】:Python: Boolean return if arbitrary element is in arbitrary list 【发布时间】:2012-10-10 12:11:43 【问题描述】:

Noob 想知道如何改进他的代码。

a, b, c = string.split(enteredDate, "/")

m31s = [1, 3, 5, 7, 8, 10, 12]
m30s = [4, 6, 9, 11]

for x in range(len(m31s)):
    x = int(m31s[x])
    if x != int(a) and b != 31:
         print "Invalid date."
for x in range(len(m30s)):
    et cetera...

如果不清楚,我正在测试输入的日期以查看它是否有效。这只是该计划的一部分。 主要问题是:测试元素是否与列表中的任何元素匹配的最佳方法是什么?

我的方法有效...但是,我怀疑有更好的方法可以做到这一点。我在标题中说 boolean 是因为我设想如下:

if secretCode(m31s, int(a)) == True:

可能是一个白日梦。只是好奇。

感谢任何花时间提供帮助的人。

【问题讨论】:

31s 不是有效的变量名。变量名不能以数字开头,但可以包含数字。 是的,你完全正确。我了解到,当我早些时候运行它时——忘记在我的帖子中进行更改。很好的收获。 【参考方案1】:

你应该使用 python datetime 库。

try:
    datetime.datetime.strptime(enteredDate, "%m/%d/%Y")
except:
    print 'Invalid date'

【讨论】:

+1 表示日期时间。在 OP 的代码中,a 似乎是月份,b 似乎是日期 (31)。所以也许他想要%m/%d/%Y 感谢您向我介绍这个库。顺便说一句:似乎应该是“%m/%d/%Y” 哇,错过了你的评论 unutbu。抱歉重复了。【参考方案2】:

我建议:

替换

   a, b, c = string.split(enteredDate, "/")

   a, b, c = enteredDate.split("/")

没关系,但第一个版本需要导入string模块,第二个不需要。

int(m31s[x]) 替换为m31s[x](你知道那些已经是int,那为什么还要额外的int( ... )? 如果secretCode( ... )返回true或false,你可以直接写if secretCode( ... ):,不需要和== True比较。 而不是调用int(a)int(b)int(c),你可以简单地写a, b, c = map(int, enteredDate.split("\")),然后忘记那些int( ... ),因为你知道它们是int。此外,如果这些不是 int,您将立即获得异常,而无需在代码中进行不必要的处理。

【讨论】:

感谢所有风格建议。说真的——很难得到这些小的修正,这对我来说是无价的。如果我能更频繁地得到它们!【参考方案3】:

您可以使用语法if elem in list。例如:

>>> if 1 in [1,2,3,4,5]:
...     print 'found 1'
... 
found 1

【讨论】:

谢谢。这将被证明非常有用! 顺便说一句,我选择了您的答案,因为它回答了具体问题。其他回复也提供了极好的见解。 同意,他们很有帮助。你应该投票给他们以感谢他们。 (我也对两者都投赞成票。)

以上是关于Python:如果任意元素在任意列表中,则返回布尔值的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是有一种方法可以在任意范围 F 内从 S 点到达 G 点

如何利用jquery在任意指定li元素后面插入新的li元素

python内置函数

在任意时间以任意金额重复付款?

为啥 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表?

比较具有布尔属性的两个通用项,如果其中任何一个返回true,则返回结果通用列表中的true