我正在尝试编写一个函数来验证列表。
基本上,对于列表中的任何给定元素,它前面的项目或其后面的项目必须相同。
一个好的列表定义为:
good_list = ["H", "H", "H", "M", "M", "L", "L", "M", "M", "H", "H", "H"]
坏列表定义为:
bad_list = ["H", "M", "H", "M", "M", "L", "L", "M", "M", "H", "H", "H"]
我花了几天时间尝试不同的解决方案(并阅读 stackoverflow),下面是我目前拥有的解决方案,但它没有返回正确的答案。根据反馈(谢谢!),我对其进行了更新并将参数名称从列表更改为季节,并将其设为 OR。虽然它不应该返回一个“有效列表”?
bad_list = ["H", "M", "H", "M", "M", "L", "L", "M", "M", "H", "H", "H"]
def check_list(season):
for i, a in enumerate(season):
if season[i] == season[i-1] or season[i] == season[i+1]:
return True
return False
result = check_list(bad_list)
if result == True:
print "Valid list"
else:
print "Invalid list"
请您参考如下方法:
我会简单地使用 itertools.groupby :
if all(len(tuple(group)) > 1 for key, group in itertools.groupby(the_list)):
print "valid"
else:
print "invalid"
基本上要求“每个元素应该在它之前或之后有一个相等的元素”等同于“列表必须由最小长度为 2 的连续元素组组成”。 groupby 函数对这些进行分组,您只需检查所有 它们的长度是否大于1。
