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