在if语句中自动增加一个 - “数字”

时间:2012-03-17 15:54:08

标签: python methods if-statement

我在Python中遇到了问题。

如何完全自动地增加一个if语句中的“数字”?

了解我的一个例子。我有这种情况

def name1:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3] == ldictionary[class.methodclass()][constant - 4] == dictionary[class.methodclass()][constant - 5]):
        blablabla

def name2:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3] == ldictionary[class.methodclass()][constant - 4]):
        blabla

def name3:
    if (dictionary[class.methodclass()][constant - 1] == dictionary[class.methodclass()][constant - 2] == dictionary[class.methodclass()][constant - 3]):
        blabla

我重复相同的代码,那么如何避免这种情况?

谢谢

编辑:我有一个正常的dictonary喜欢

dictonary = {"Element": ["Key1", "Key2"]}

我想要一个循环确认我使用“Key1”==“Key2”的情况。

3 个答案:

答案 0 :(得分:1)

这是一种方式:

if all ( [ dictionary[class.methodclass()][constant - 1] ==  
           dictionary[class.methodclass()][ noConstant]  
           for noConstant in range(constant - 2,  constant - 6, -1 )  ]
       ):
    blablabla

答案 1 :(得分:0)

我可以从您的代码中总结出来的核心目标是:判断列表某些部分的值是否完全相同。

根据这个逻辑,我们可以编写一个存档功能:

def is_list_section_repeated(li, start, end):
    section = li[start:end]
    if section.count(section[0]) == len(section):
        return True
    return False

使用此功能,您的代码可以是:

def name1:
    if is_list_section_repeated(dictionary[class.methodclass()], constant - 5, constant - 1):
        blablabla

def name2:
    if is_list_section_repeated(dictionary[class.methodclass()], constant - 4, constant - 1):
        blablabla

....

由于情况对于大多数常见情况来说是一种复杂的情况,我认为编写一个处理它的函数更好,使用可能使代码不清楚且难以阅读的棘手技巧:P

答案 2 :(得分:0)

您的任务分为两部分:

a)您有几个功能可以重复相同的复杂测试。

解决方案:如果测试足够复杂,请将其分解为一个返回True或False的单独函数。在每个nameN函数中使用它。

b)您有一个测试,检查一系列元素是否都相同。在编辑中使用简单版本:给定一个字典键列表,检查所有值是否相同。

解决方案:获取所有值,形成一个集合并检查其大小:

tocheck = [ "Key1", "Key2" ]
values = set( mydict[k] for k in tocheck )
if len(values) == 1:
    print "equal"
else:
    print "unequal"

您可以对原始代码采用相同的方法:编写一个理解(或任何其他类型的循环),将您收集的所有值集合到一个集合中。如果你做了很多,那么设置一个封装这种测试的简单函数是值得的。