我想在下面的陈述中写一点更紧凑:
if day == "monday" and element[0] == 1:
# code A
elif day == "tuesday" and element[0] == 2:
# code A (the same)
#and so on...
我想到了列表推导,其中第一个列表包含所有工作日:["星期一","星期二"]#等等 和第二个列表整数:[1,2]#等等
这可能会使if语句写得有点紧凑吗? 非常感谢!
答案 0 :(得分:2)
确切地理解你所追求的内容有点难以理解,但有一点往往有助于分解长(ish)部分表达式,例如element[0]
使代码混乱
考虑类似的事情:
here = (day, element[0])
if here == ("monday", 1):
# Code A
elif here == ("tuesday", 2):
# Code B
它至少有点密集,即较少重复,并且更重视重要部分,因为它"折叠"将and
转换为比较元组。单词here
是一个占位符,它可能应该是你的逻辑中真正有意义的东西。
答案 1 :(得分:0)
也许不是列表理解,这是人们在创建列表时所使用的。
如果你想在步骤中处理两个数据列表,那么zip()内置就是你想要的:
days = "mon tue wed thu fri sat sun".split()
daynums = range(1,7+1)
element = (6, 100)
day = "sat"
for dayname, daynum in zip(days,daynums):
if day == dayname and element[0] == daynum:
print "there is a match!"
答案 2 :(得分:0)
如果所有日期# code A
都相同,那么
days = set(enumerate(["monday", "tuesday", ...], 1))
if (element[0], day) in days:
# code A
答案 3 :(得分:0)
如果我正确阅读了您的问题,那么如果日期名称的索引与元素[0]的值匹配,则需要运行代码A.如果是这样,那么这就是您想要的:
#! /usr/bin/env python
def main():
weekdays = ["monday", "tuesday", "wednesday",
"thursday", "friday", "saturday", "sunday"]
#Build a set of (daynumber, dayname) tuples
day_elements = set(enumerate(weekdays, 1))
#Print day_elements to check that it's what we want
for i,v in day_elements:
print i, v
print
#................
day = "thursday"
element = [4]
if (element[0], day) in day_elements:
print "Calling code A"
else:
print "Whoops!"
if __name__ == "__main__":
main()