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

3

新手想知道如何提高他的代码水平。

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...

如果不清楚的话,我正在测试输入的日期是否有效。这只是程序的一部分。 主要问题是:如何最好地测试一个元素是否与列表中的任何一个元素匹配?

我的方法可行...但我怀疑有更好的方法。我在标题中说布尔值,因为我想到了这样的东西:

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

可能只是一个空想。只是好奇。

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


4
"31s" 不是一个有效的变量名。变量名不能以数字开头,但可以包含数字。 - unutbu
是的,你说得完全正确。我之前运行时就学到了这一点——忘记在我的帖子中进行更改了。很好的发现。 - d0rmLife
3个回答

6
你可以使用语法 if elem in list。例如:
>>> if 1 in [1,2,3,4,5]:
...     print 'found 1'
... 
found 1

谢谢。这将非常有用! - d0rmLife
顺便说一句,我选择了你的答案,因为它回答了具体的问题。其他回复也提供了很好的见解。 - d0rmLife
同意,他们非常有帮助。你应该点赞以表达感谢。(我也会给他们点赞的。) - Matthew Adams

2
你应该使用 Python 的datetime库。
try:
    datetime.datetime.strptime(enteredDate, "%m/%d/%Y")
except:
    print 'Invalid date'

+1 表示日期加一天。在 OP 的代码中,a 似乎是月份,b 是日期(31)。因此他可能想要 %m/%d/%Y 格式。 - unutbu
感谢您向我介绍这个库。顺便说一句:似乎应该是“%m/%d/%Y”。 - d0rmLife
哇,错过了你的评论unutbu。对于重复我感到抱歉。 - d0rmLife

1

我建议:

  •    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进行比较。
  • 你可以使用a, b, c = map(int, enteredDate.split("\"))代替调用int(a)int(b)int(c),并且忘记那些后面的int( ... ),因为你知道它们是整数。此外,如果它们不是整数,你将立即在代码中得到异常,而不会不必要地继续执行代码。

感谢所有的样式建议。说真的,这些微小的修正对我来说非常宝贵,但很难得到。如果我能更经常地得到它们就好了! - d0rmLife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接