Python:检查列表是否按顺序排列|定义了列表的末尾
我的函数是这样的, 检查mylist的所有值是否都是连续的,即十六进制列表。例如:Python:检查列表是否按顺序排列|定义了列表的末尾,python,list,hex,sequence,enumerate,Python,List,Hex,Sequence,Enumerate,我的函数是这样的, 检查mylist的所有值是否都是连续的,即十六进制列表。例如: mylist1 = ['03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f'] mylist2 = ['03', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f'] def checkmylist(mylist): it = (in
mylist1 = ['03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f']
mylist2 = ['03', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f']
def checkmylist(mylist):
it = (int(x, 16) for x in mylist)
first = next(it)
return all(a == b for a, b in enumerate(it, first + 1))
checkmylist(mylist1)
#expected to returns pass
checkmylist(mylist2)
#expected to returns fail
但是我的函数还需要一个逻辑,它应该检查列表,即使列表的最后一个值已知,例如
00 to 10 | 00 to 0a(Hex)
这里已经知道,10是最后一个值,此时我的函数应该重新初始化计数器,这是最有效的方法。对于有限的值集,我的函数应该返回true
mylist = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a','00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a']
checkmylist(mylist)
#Expected True
您可以使用
==
操作符检查排序列表是否与原始列表相同
# list is not in order
mylist = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a','00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a']
# list is in order
mylist2 = ['03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c','0d', '0e', '0f']
sorted(mylist) == mylist # returns False
sorted(mylist2) == mylist2 # returns True
您可以使用模数运算符处理从零重新启动:
mylist = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a',
'00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a']
def checkmylist(mylist, end=10):
end += 1
it = (int(x, 16) for x in mylist)
first = next(it)
return all(a % end == b for a, b in enumerate(it, first + 1))
checkmylist(mylist) # returns True
对于10以外的已知结束值,您需要使用函数的第二个参数(例如,
checkmylist(mylist,end=14)
)在这种情况下,值是否总是从零开始/重新开始?或者类似于['08'、'09'、'0a'、'08'、'09'、'0a']
的东西也应该返回True
?列表可以从任何值开始,但重新启动将从零开始。我的问题是检查我的列表是否是连续的,其中我的列表是非常有限的列表,我的清单又从头开始了。@zachgates这个答案与被问的问题无关。我不明白为什么@zachgates的答案是错误的。似乎您正在尝试查看列表是否已排序。是这样吗?