检查Python中的元素是否无序

2024-09-19 20:49:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一下列表中的元素,看看它们与字典相比是否有问题。在

我有以下代码:

list = ['jump','double blink']
dictionary = collections.OrderedDict([("wink", 1), ("double blink", 10), 
("close your eyes", 100), ("jump", 1000)])

如果我检查list的元素,它应该返回False,因为字典中“jump”在“double blink”之后。在

起初,我想我可以使用for循环来检查列表中操作的索引是否小于字典中下一个操作的索引。在

这实质上是将键列表中“jump”的位置(即3)与列表中下一个操作的字典索引进行比较(下一项是“double blink”,索引为1)。因此4<;1将返回false,但我不确定如何调用for循环中的下一个项,而不会得到列表超出范围的错误。在


Tags: 代码元素列表forclosedictionary字典collections
2条回答

您可以使用^{}获取当前项和它旁边的项(不涉及索引,因此不必担心IndexError),然后使用生成器表达式的^{}来完成剩下的工作:

>>> lst = ['jump','double blink']
>>> all(dictionary[f] < dictionary[s] for f, s in zip(lst, lst[1:]))
False
>>> lst = d.keys()
>>> all(dictionary[f] < dictionary[s] for f, s in zip(lst, lst[1:]))
True

这里zip()返回如下内容:

^{pr2}$

另一个选择是使用^{} recipe from itertools's recipes,它使用迭代器执行完全相同的操作:

>>> from itertools import tee, izip
>>> def pairwise(iterable):
        "s -> (s0,s1), (s1,s2), (s2, s3), ..."
        a, b = tee(iterable)
        next(b, None)
        return izip(a, b)
... 
>>> all(dictionary[f] < dictionary[s] for f, s in pairwise(lst))
True
>>> list(pairwise(lst))
[('wink', 'double blink'), ('double blink', 'close your eyes'), ('close your eyes', 'jump')]

@Ashwini有正确的答案,但只要说如果值不是按任何顺序排列的,那么你可以这样做。在

>>> items = ['jump','double blink']
>>> dictionary = collections.OrderedDict([("wink", 400), ("double blink", 10),
("close your eyes", 300), ("jump", 0)])
>>> keys = iter(dictionary)
>>> all(item in keys for item in items)
False

相关问题 更多 >